debug popup

This commit is contained in:
ryleedavis 2022-11-02 20:07:27 -06:00
parent 40a6e916f2
commit 0504f2336c
2 changed files with 245 additions and 88 deletions

View file

@ -10,6 +10,8 @@ import 'package:stackwallet/utilities/theme/stack_colors.dart';
import 'package:stackwallet/widgets/custom_buttons/draggable_switch_button.dart'; import 'package:stackwallet/widgets/custom_buttons/draggable_switch_button.dart';
import 'package:stackwallet/widgets/rounded_white_container.dart'; import 'package:stackwallet/widgets/rounded_white_container.dart';
import 'debug_info_dialog.dart';
class AdvancedSettings extends ConsumerStatefulWidget { class AdvancedSettings extends ConsumerStatefulWidget {
const AdvancedSettings({Key? key}) : super(key: key); const AdvancedSettings({Key? key}) : super(key: key);
@ -226,16 +228,16 @@ class ShowLogsButton extends ConsumerWidget {
}) : super(key: key); }) : super(key: key);
@override @override
Widget build(BuildContext context, WidgetRef ref) { Widget build(BuildContext context, WidgetRef ref) {
// Future<void> viewDebugLogs() async { Future<void> viewDebugLogs() async {
// await showDialog<dynamic>( await showDialog<dynamic>(
// context: context, context: context,
// useSafeArea: false, useSafeArea: false,
// barrierDismissible: true, barrierDismissible: true,
// builder: (context) { builder: (context) {
// return const DebugInfoDialog(); return const DebugInfoDialog();
// }, },
// ); );
// } }
return SizedBox( return SizedBox(
width: 101, width: 101,
@ -245,8 +247,7 @@ class ShowLogsButton extends ConsumerWidget {
.extension<StackColors>()! .extension<StackColors>()!
.getPrimaryEnabledButtonColor(context), .getPrimaryEnabledButtonColor(context),
onPressed: () { onPressed: () {
// viewDebugLogs();
// viewDebugLogs();
}, },
child: Text( child: Text(
"Show logs", "Show logs",

View file

@ -1,29 +1,33 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:flutter_svg/svg.dart'; import 'package:flutter_svg/svg.dart';
import 'package:stackwallet/models/isar/models/log.dart'; import 'package:stackwallet/models/isar/models/log.dart';
import 'package:stackwallet/providers/global/debug_service_provider.dart';
import 'package:stackwallet/utilities/assets.dart';
import 'package:stackwallet/utilities/constants.dart'; import 'package:stackwallet/utilities/constants.dart';
import 'package:stackwallet/utilities/enums/log_level_enum.dart';
import 'package:stackwallet/utilities/text_styles.dart'; import 'package:stackwallet/utilities/text_styles.dart';
import 'package:stackwallet/utilities/theme/stack_colors.dart';
import 'package:stackwallet/utilities/util.dart';
import 'package:stackwallet/widgets/desktop/desktop_dialog.dart'; import 'package:stackwallet/widgets/desktop/desktop_dialog.dart';
import 'package:stackwallet/widgets/desktop/desktop_dialog_close_button.dart'; import 'package:stackwallet/widgets/desktop/desktop_dialog_close_button.dart';
import 'package:stackwallet/widgets/desktop/primary_button.dart'; import 'package:stackwallet/widgets/desktop/primary_button.dart';
import 'package:stackwallet/widgets/desktop/secondary_button.dart'; import 'package:stackwallet/widgets/desktop/secondary_button.dart';
import 'package:stackwallet/widgets/icon_widgets/x_icon.dart';
import 'package:stackwallet/widgets/rounded_container.dart';
import 'package:stackwallet/widgets/stack_text_field.dart';
import 'package:stackwallet/widgets/textfield_icon_button.dart';
// import '../../../utilities/assets.dart'; class DebugInfoDialog extends ConsumerStatefulWidget {
// import '../../../utilities/util.dart';
// import '../../../widgets/icon_widgets/x_icon.dart';
// import '../../../widgets/stack_text_field.dart';
// import '../../../widgets/textfield_icon_button.dart';
class DebugInfoDialog extends StatefulWidget {
const DebugInfoDialog({Key? key}) : super(key: key); const DebugInfoDialog({Key? key}) : super(key: key);
@override @override
State<StatefulWidget> createState() => _DebugInfoDialog(); ConsumerState<DebugInfoDialog> createState() => _DebugInfoDialog();
} }
class _DebugInfoDialog extends State<DebugInfoDialog> { class _DebugInfoDialog extends ConsumerState<DebugInfoDialog> {
final _searchController = TextEditingController(); late final TextEditingController searchDebugController;
final _searchFocusNode = FocusNode(); late final FocusNode searchDebugFocusNode;
final scrollController = ScrollController(); final scrollController = ScrollController();
@ -62,15 +66,19 @@ class _DebugInfoDialog extends State<DebugInfoDialog> {
@override @override
void initState() { void initState() {
// ref.read(debugServiceProvider).updateRecentLogs(); searchDebugController = TextEditingController();
searchDebugFocusNode = FocusNode();
ref.read(debugServiceProvider).updateRecentLogs();
super.initState(); super.initState();
} }
@override @override
void dispose() { void dispose() {
_searchController.dispose(); searchDebugFocusNode.dispose();
searchDebugController.dispose();
scrollController.dispose(); scrollController.dispose();
_searchFocusNode.dispose();
super.dispose(); super.dispose();
} }
@ -78,7 +86,7 @@ class _DebugInfoDialog extends State<DebugInfoDialog> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return DesktopDialog( return DesktopDialog(
maxHeight: 800, maxHeight: 850,
maxWidth: 600, maxWidth: 600,
child: Column( child: Column(
children: [ children: [
@ -96,68 +104,216 @@ class _DebugInfoDialog extends State<DebugInfoDialog> {
const DesktopDialogCloseButton(), const DesktopDialogCloseButton(),
], ],
), ),
Row( Expanded(
children: [ flex: 24,
// ClipRRect( child: NestedScrollView(
// borderRadius: BorderRadius.circular( floatHeaderSlivers: true,
// Constants.size.circularBorderRadius, headerSliverBuilder: (context, innerBoxIsScrolled) {
// ), return [
// child: TextField( SliverOverlapAbsorber(
// key: const Key("desktopSettingDebugInfo"), handle: NestedScrollView.sliverOverlapAbsorberHandleFor(
// autocorrect: Util.isDesktop ? false : true, context),
// enableSuggestions: Util.isDesktop ? false : true, sliver: SliverToBoxAdapter(
// controller: _searchController, child: Padding(
// focusNode: _searchFocusNode, padding: const EdgeInsets.symmetric(
// // onChanged: (newString) { vertical: 16, horizontal: 32),
// // setState(() => _searchTerm = newString); child: Column(
// // }, children: [
// style: STextStyles.field(context), Padding(
// decoration: standardInputDecoration( padding: const EdgeInsets.only(bottom: 16),
// "Search", child: ClipRRect(
// _searchFocusNode, borderRadius: BorderRadius.circular(
// context, Constants.size.circularBorderRadius,
// ).copyWith( ),
// prefixIcon: Padding( child: TextField(
// padding: const EdgeInsets.symmetric( autocorrect: Util.isDesktop ? false : true,
// horizontal: 10, enableSuggestions:
// vertical: 16, Util.isDesktop ? false : true,
// ), controller: searchDebugController,
// child: SvgPicture.asset( focusNode: searchDebugFocusNode,
// Assets.svg.search, onChanged: (newString) {
// width: 16, setState(() => _searchTerm = newString);
// height: 16, },
// ), style: STextStyles.field(context),
// ), decoration: standardInputDecoration(
// suffixIcon: _searchController.text.isNotEmpty "Search",
// ? Padding( searchDebugFocusNode,
// padding: const EdgeInsets.only(right: 0), context,
// child: UnconstrainedBox( ).copyWith(
// child: Row( prefixIcon: Padding(
// children: [ padding: const EdgeInsets.symmetric(
// TextFieldIconButton( horizontal: 10,
// child: const XIcon(), vertical: 16,
// onTap: () async { ),
// setState(() { child: SvgPicture.asset(
// _searchController.text = ""; Assets.svg.search,
// _searchTerm = ""; width: 16,
// }); height: 16,
// }, ),
// ), ),
// ], suffixIcon: searchDebugController
// ), .text.isNotEmpty
// ), ? Padding(
// ) padding:
// : null, const EdgeInsets.only(right: 0),
// ), child: UnconstrainedBox(
// ), child: Row(
// ), children: [
], TextFieldIconButton(
child: const XIcon(),
onTap: () async {
setState(() {
searchDebugController
.text = "";
_searchTerm = "";
});
},
),
],
),
),
)
: null,
),
),
),
),
const SizedBox(
height: 12,
),
],
),
),
),
),
];
},
body: Builder(
builder: (context) {
final logs = filtered(
ref.watch(debugServiceProvider
.select((value) => value.recentLogs)),
_searchTerm)
.reversed
.toList(growable: false);
return CustomScrollView(
reverse: true,
// shrinkWrap: true,
controller: scrollController,
slivers: [
SliverOverlapInjector(
handle: NestedScrollView.sliverOverlapAbsorberHandleFor(
context,
),
),
SliverList(
delegate: SliverChildBuilderDelegate(
(context, index) {
final log = logs[index];
return Container(
key: Key(
"log_${log.id}_${log.timestampInMillisUTC}"),
decoration: BoxDecoration(
color: Theme.of(context)
.extension<StackColors>()!
.popupBG,
borderRadius: _borderRadius(index, logs.length),
),
child: Padding(
padding: const EdgeInsets.all(4),
child: Padding(
padding: const EdgeInsets.symmetric(
horizontal: 32),
child: RoundedContainer(
padding: const EdgeInsets.all(0),
color: Theme.of(context)
.extension<StackColors>()!
.popupBG,
child: Column(
crossAxisAlignment:
CrossAxisAlignment.start,
children: [
Row(
children: [
Text(
" [${log.logLevel.name}]",
style: STextStyles.baseXS(context)
.copyWith(
fontSize: 8,
color: (log.logLevel ==
LogLevel.Info
? Theme.of(context)
.extension<
StackColors>()!
.topNavIconGreen
: (log.logLevel ==
LogLevel.Warning
? Theme.of(context)
.extension<
StackColors>()!
.topNavIconYellow
: (log.logLevel ==
LogLevel.Error
? Colors.orange
: Theme.of(context)
.extension<
StackColors>()!
.topNavIconRed))),
),
),
Text(
"[${DateTime.fromMillisecondsSinceEpoch(log.timestampInMillisUTC, isUtc: true)}]: ",
style: STextStyles.baseXS(context)
.copyWith(
fontSize: 12,
color: Theme.of(context)
.extension<StackColors>()!
.textDark3,
),
),
],
),
Row(
crossAxisAlignment:
CrossAxisAlignment.start,
children: [
const SizedBox(
width: 20,
),
Flexible(
child: Column(
crossAxisAlignment:
CrossAxisAlignment.start,
children: [
SelectableText(
log.message,
style: STextStyles.baseXS(
context)
.copyWith(
fontSize: 11.5),
),
],
),
),
],
),
],
),
),
),
),
);
},
childCount: logs.length,
),
),
],
);
},
),
),
), ),
// Column(
// children: [
//
// ],
// ),
const Spacer(), const Spacer(),
Padding( Padding(
padding: const EdgeInsets.all(32), padding: const EdgeInsets.all(32),