debugging and cleanup

This commit is contained in:
Christien Rioux 2025-03-13 21:34:12 -04:00
parent 604ec9cfdd
commit d460a0388c
69 changed files with 2306 additions and 790 deletions

View file

@ -1,13 +1,11 @@
import 'dart:async';
import 'package:animated_custom_dropdown/custom_dropdown.dart';
import 'package:ansicolor/ansicolor.dart';
import 'package:awesome_extensions/awesome_extensions.dart';
import 'package:cool_dropdown/cool_dropdown.dart';
import 'package:cool_dropdown/models/cool_dropdown_item.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_animate/flutter_animate.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:flutter_translate/flutter_translate.dart';
import 'package:go_router/go_router.dart';
@ -17,6 +15,7 @@ import 'package:xterm/xterm.dart';
import '../../layout/layout.dart';
import '../../notifications/notifications.dart';
import '../../theme/models/scale_theme/scale_custom_dropdown_theme.dart';
import '../../theme/theme.dart';
import '../../tools/tools.dart';
import 'history_text_editing_controller.dart';
@ -30,6 +29,15 @@ const kDefaultTerminalStyle = TerminalStyle(
// height: 1.2,
fontFamily: 'Source Code Pro');
class LogLevelDropdownItem {
const LogLevelDropdownItem(
{required this.label, required this.icon, required this.value});
final String label;
final Widget icon;
final LogLevel value;
}
class DeveloperPage extends StatefulWidget {
const DeveloperPage({super.key});
@ -49,7 +57,7 @@ class _DeveloperPageState extends State<DeveloperPage> {
});
for (var i = 0; i < logLevels.length; i++) {
_logLevelDropdownItems.add(CoolDropdownItem<LogLevel>(
_logLevelDropdownItems.add(LogLevelDropdownItem(
label: logLevelName(logLevels[i]),
icon: Text(logLevelEmoji(logLevels[i])),
value: logLevels[i]));
@ -167,29 +175,28 @@ class _DeveloperPageState extends State<DeveloperPage> {
@override
Widget build(BuildContext context) {
final theme = Theme.of(context);
final textTheme = theme.textTheme;
final scale = theme.extension<ScaleScheme>()!;
final scaleTheme = theme.extension<ScaleTheme>()!;
final dropdownTheme = scaleTheme.customDropdownTheme();
final scaleConfig = theme.extension<ScaleConfig>()!;
// WidgetsBinding.instance.addPostFrameCallback((_) {
// if (!_isScrolling && _wantsBottom) {
// _scrollToBottom();
// }
// });
final hintColor = scaleConfig.useVisualIndicators
? scale.primaryScale.primaryText
: scale.primaryScale.primary;
return Scaffold(
backgroundColor: scale.primaryScale.primary,
backgroundColor: scale.primaryScale.border,
appBar: DefaultAppBar(
title: Text(translate('developer.title')),
leading: IconButton(
icon: Icon(Icons.arrow_back, color: scale.primaryScale.primaryText),
icon: Icon(Icons.arrow_back, color: scale.primaryScale.borderText),
onPressed: () => GoRouterHelper(context).pop(),
),
actions: [
IconButton(
icon: const Icon(Icons.copy),
color: scale.primaryScale.primaryText,
disabledColor: scale.primaryScale.primaryText.withAlpha(0x3F),
color: scale.primaryScale.borderText,
disabledColor: scale.primaryScale.borderText.withAlpha(0x3F),
onPressed: _terminalController.selection == null
? null
: () async {
@ -197,15 +204,15 @@ class _DeveloperPageState extends State<DeveloperPage> {
}),
IconButton(
icon: const Icon(Icons.copy_all),
color: scale.primaryScale.primaryText,
disabledColor: scale.primaryScale.primaryText.withAlpha(0x3F),
color: scale.primaryScale.borderText,
disabledColor: scale.primaryScale.borderText.withAlpha(0x3F),
onPressed: () async {
await copyAll(context);
}),
IconButton(
icon: const Icon(Icons.clear_all),
color: scale.primaryScale.primaryText,
disabledColor: scale.primaryScale.primaryText.withAlpha(0x3F),
color: scale.primaryScale.borderText,
disabledColor: scale.primaryScale.borderText.withAlpha(0x3F),
onPressed: () async {
final confirm = await showConfirmModal(
context: context,
@ -216,74 +223,39 @@ class _DeveloperPageState extends State<DeveloperPage> {
await clear(context);
}
}),
CoolDropdown<LogLevel>(
controller: _logLevelController,
defaultItem: _logLevelDropdownItems
.singleWhere((x) => x.value == _logLevelDropDown),
onChange: (value) {
setState(() {
_logLevelDropDown = value;
Loggy('').level = getLogOptions(value);
setVeilidLogLevel(value);
_logLevelController.close();
});
},
resultOptions: ResultOptions(
width: 64,
height: 40,
render: ResultRender.icon,
icon: SizedBox(
width: 10,
height: 10,
child: CustomPaint(
painter: DropdownArrowPainter(
color: scale.primaryScale.primaryText))),
textStyle: textTheme.labelMedium!
.copyWith(color: scale.primaryScale.primaryText),
padding: const EdgeInsets.fromLTRB(8, 4, 8, 4),
openBoxDecoration: BoxDecoration(
//color: scale.primaryScale.border,
border: Border.all(
color: scaleConfig.useVisualIndicators
? scale.primaryScale.hoverBorder
: scale.primaryScale.borderText),
borderRadius:
BorderRadius.circular(8 * scaleConfig.borderRadiusScale),
),
boxDecoration: BoxDecoration(
//color: scale.primaryScale.hoverBorder,
border: Border.all(
color: scaleConfig.useVisualIndicators
? scale.primaryScale.hoverBorder
: scale.primaryScale.borderText),
borderRadius:
BorderRadius.circular(8 * scaleConfig.borderRadiusScale),
),
),
dropdownOptions: DropdownOptions(
width: 160,
align: DropdownAlign.right,
duration: 150.ms,
color: scale.primaryScale.elementBackground,
borderSide: BorderSide(color: scale.primaryScale.border),
borderRadius:
BorderRadius.circular(8 * scaleConfig.borderRadiusScale),
padding: const EdgeInsets.fromLTRB(8, 4, 8, 4),
),
dropdownTriangleOptions: const DropdownTriangleOptions(
align: DropdownTriangleAlign.right),
dropdownItemOptions: DropdownItemOptions(
selectedTextStyle: textTheme.labelMedium!
.copyWith(color: scale.primaryScale.appText),
textStyle: textTheme.labelMedium!
.copyWith(color: scale.primaryScale.appText),
selectedBoxDecoration: BoxDecoration(
color: scale.primaryScale.activeElementBackground),
mainAxisAlignment: MainAxisAlignment.spaceBetween,
padding: const EdgeInsets.fromLTRB(8, 4, 8, 4),
selectedPadding: const EdgeInsets.fromLTRB(8, 4, 8, 4)),
dropdownList: _logLevelDropdownItems,
).paddingLTRB(0, 0, 8, 0)
SizedBox.fromSize(
size: const Size(120, 48),
child: CustomDropdown<LogLevelDropdownItem>(
items: _logLevelDropdownItems,
initialItem: _logLevelDropdownItems
.singleWhere((x) => x.value == _logLevelDropDown),
onChanged: (item) {
if (item != null) {
setState(() {
_logLevelDropDown = item.value;
Loggy('').level = getLogOptions(item.value);
setVeilidLogLevel(item.value);
});
}
},
headerBuilder: (context, item, enabled) => Row(children: [
item.icon,
const Spacer(),
Text(item.label).copyWith(style: dropdownTheme.textStyle)
]),
listItemBuilder: (context, item, enabled, onItemSelect) =>
Row(children: [
item.icon,
const Spacer(),
Text(item.label).copyWith(style: dropdownTheme.textStyle)
]),
decoration: dropdownTheme.decoration,
disabledDecoration: dropdownTheme.disabledDecoration,
listItemPadding: dropdownTheme.listItemPadding,
itemsListPadding: dropdownTheme.itemsListPadding,
expandedHeaderPadding: dropdownTheme.expandedHeaderPadding,
closedHeaderPadding: dropdownTheme.closedHeaderPadding,
)).paddingLTRB(0, 4, 8, 4),
],
),
body: GestureDetector(
@ -312,21 +284,24 @@ class _DeveloperPageState extends State<DeveloperPage> {
decoration: InputDecoration(
filled: true,
contentPadding: const EdgeInsets.fromLTRB(8, 2, 8, 2),
enabledBorder: OutlineInputBorder(
borderRadius: BorderRadius.circular(
8 * scaleConfig.borderRadiusScale),
borderSide: BorderSide.none),
border: OutlineInputBorder(
borderRadius: BorderRadius.circular(
8 * scaleConfig.borderRadiusScale),
),
fillColor: scale.primaryScale.subtleBackground,
enabledBorder:
const OutlineInputBorder(borderSide: BorderSide.none),
border:
const OutlineInputBorder(borderSide: BorderSide.none),
focusedBorder:
const OutlineInputBorder(borderSide: BorderSide.none),
fillColor: scale.primaryScale.elementBackground,
hoverColor: scale.primaryScale.elementBackground,
hintStyle: scaleTheme.textTheme.labelMedium!.copyWith(
color: scaleConfig.useVisualIndicators
? hintColor.withAlpha(0x7F)
: hintColor),
hintText: translate('developer.command'),
suffixIcon: IconButton(
icon: Icon(Icons.send,
color: _historyController.controller.text.isEmpty
? scale.primaryScale.primary.withAlpha(0x3F)
: scale.primaryScale.primary),
? hintColor.withAlpha(0x7F)
: hintColor),
onPressed:
(_historyController.controller.text.isEmpty || _busy)
? null
@ -366,9 +341,9 @@ class _DeveloperPageState extends State<DeveloperPage> {
final _terminalController = TerminalController();
late final HistoryTextEditingController _historyController;
final _logLevelController = DropdownController<LogLevel>(duration: 250.ms);
final List<CoolDropdownItem<LogLevel>> _logLevelDropdownItems = [];
final List<LogLevelDropdownItem> _logLevelDropdownItems = [];
var _logLevelDropDown = log.level.logLevel;
var _showEllet = false;
var _busy = false;