From 58b5300f061e75e59201cf52ad13765890262721 Mon Sep 17 00:00:00 2001 From: DenserMeerkat Date: Thu, 4 Jul 2024 11:42:46 +0530 Subject: [PATCH 1/5] fix: ui_provider_tests --- lib/screens/about_dialog.dart | 2 +- lib/screens/dashboard.dart | 27 ++++++++-------- lib/screens/mobile/dashboard.dart | 12 +++---- lib/screens/mobile/navbar.dart | 18 +++++------ test/providers/ui_providers_test.dart | 46 +++------------------------ 5 files changed, 34 insertions(+), 71 deletions(-) diff --git a/lib/screens/about_dialog.dart b/lib/screens/about_dialog.dart index 692b6743..48362f44 100644 --- a/lib/screens/about_dialog.dart +++ b/lib/screens/about_dialog.dart @@ -9,7 +9,7 @@ showAboutAppDialog( context: context, builder: (context) { return AlertDialog( - contentPadding: kPt20 + kPh20, + contentPadding: kPt20 + kPh20 + kPb10, content: Container( width: double.infinity, height: double.infinity, diff --git a/lib/screens/dashboard.dart b/lib/screens/dashboard.dart index 931092e9..92acda3e 100644 --- a/lib/screens/dashboard.dart +++ b/lib/screens/dashboard.dart @@ -54,18 +54,18 @@ class Dashboard extends ConsumerWidget { style: Theme.of(context).textTheme.labelSmall, ), kVSpacer10, - IconButton( - isSelected: railIdx == 2, - onPressed: () { - ref.read(navRailIndexStateProvider.notifier).state = 2; - }, - icon: const Icon(Icons.history_outlined), - selectedIcon: const Icon(Icons.history), - ), - Text( - 'History', - style: Theme.of(context).textTheme.labelSmall, - ), + // IconButton( + // isSelected: railIdx == 2, + // onPressed: () { + // ref.read(navRailIndexStateProvider.notifier).state = 2; + // }, + // icon: const Icon(Icons.history_outlined), + // selectedIcon: const Icon(Icons.history), + // ), + // Text( + // 'History', + // style: Theme.of(context).textTheme.labelSmall, + // ), ], ), Expanded( @@ -90,7 +90,7 @@ class Dashboard extends ConsumerWidget { padding: const EdgeInsets.only(bottom: 16.0), child: NavbarButton( railIdx: railIdx, - buttonIdx: 3, + buttonIdx: 2, selectedIcon: Icons.settings, icon: Icons.settings_outlined, label: 'Settings', @@ -117,7 +117,6 @@ class Dashboard extends ConsumerWidget { EnvironmentPage( scaffoldKey: mobileScaffoldKey, ), - const SizedBox(), const SettingsPage(), ], ), diff --git a/lib/screens/mobile/dashboard.dart b/lib/screens/mobile/dashboard.dart index d6e73490..c23c1cd2 100644 --- a/lib/screens/mobile/dashboard.dart +++ b/lib/screens/mobile/dashboard.dart @@ -72,13 +72,13 @@ class PageBranch extends ConsumerWidget { return EnvironmentPage( scaffoldKey: scaffoldKey, ); + // case 2: + // // TODO: Implement history page + // return const PageBase( + // title: 'History', + // scaffoldBody: SizedBox(), + // ); case 2: - // TODO: Implement history page - return const PageBase( - title: 'History', - scaffoldBody: SizedBox(), - ); - case 3: return const PageBase( title: 'Settings', scaffoldBody: SettingsPage(), diff --git a/lib/screens/mobile/navbar.dart b/lib/screens/mobile/navbar.dart index 5449f45f..438969b7 100644 --- a/lib/screens/mobile/navbar.dart +++ b/lib/screens/mobile/navbar.dart @@ -48,19 +48,19 @@ class BottomNavBar extends ConsumerWidget { label: 'Variables', ), ), + // Expanded( + // child: NavbarButton( + // railIdx: railIdx, + // buttonIdx: 2, + // selectedIcon: Icons.history, + // icon: Icons.history_outlined, + // label: 'History', + // ), + // ), Expanded( child: NavbarButton( railIdx: railIdx, buttonIdx: 2, - selectedIcon: Icons.history, - icon: Icons.history_outlined, - label: 'History', - ), - ), - Expanded( - child: NavbarButton( - railIdx: railIdx, - buttonIdx: 3, selectedIcon: Icons.settings, icon: Icons.settings_outlined, label: 'Settings', diff --git a/test/providers/ui_providers_test.dart b/test/providers/ui_providers_test.dart index ff52c62e..be1cd59b 100644 --- a/test/providers/ui_providers_test.dart +++ b/test/providers/ui_providers_test.dart @@ -57,7 +57,6 @@ void main() { // Verify that the HomePage is displayed initially expect(find.byType(HomePage), findsOneWidget); expect(find.byType(EnvironmentPage), findsNothing); - // expect(find.byType(IntroPage), findsNothing); expect(find.byType(SettingsPage), findsNothing); }); @@ -78,40 +77,16 @@ void main() { // Verify that the EnvironmentPage is displayed expect(find.byType(HomePage), findsNothing); expect(find.byType(EnvironmentPage), findsOneWidget); - // expect(find.byType(IntroPage), findsNothing); expect(find.byType(SettingsPage), findsNothing); }); - // testWidgets( - // "Dashboard should display IntroPage when navRailIndexStateProvider is 2", - // (WidgetTester tester) async { - // await tester.pumpWidget( - // ProviderScope( - // overrides: [ - // navRailIndexStateProvider.overrideWith((ref) => 2), - // ], - // child: const Portal( - // child: MaterialApp( - // home: Dashboard(), - // ), - // ), - // ), - // ); - - // // Verify that the IntroPage is displayed - // expect(find.byType(HomePage), findsNothing); - // expect(find.byType(EnvironmentPage), findsNothing); - // expect(find.byType(IntroPage), findsOneWidget); - // expect(find.byType(SettingsPage), findsNothing); - // }); - testWidgets( - "Dashboard should display SettingsPage when navRailIndexStateProvider is 3", + "Dashboard should display SettingsPage when navRailIndexStateProvider is 2", (WidgetTester tester) async { await tester.pumpWidget( ProviderScope( overrides: [ - navRailIndexStateProvider.overrideWith((ref) => 3), + navRailIndexStateProvider.overrideWith((ref) => 2), ], child: const Portal( child: MaterialApp( @@ -124,7 +99,6 @@ void main() { // Verify that the SettingsPage is displayed expect(find.byType(HomePage), findsNothing); expect(find.byType(EnvironmentPage), findsNothing); - // expect(find.byType(IntroPage), findsNothing); expect(find.byType(SettingsPage), findsOneWidget); }); @@ -148,7 +122,7 @@ void main() { // Verify that the navRailIndexStateProvider is updated final dashboard = tester.element(find.byType(Dashboard)); final container = ProviderScope.containerOf(dashboard); - expect(container.read(navRailIndexStateProvider), 3); + expect(container.read(navRailIndexStateProvider), 2); }); testWidgets( @@ -183,11 +157,10 @@ void main() { // Verify that the navRailIndexStateProvider still has the updated value final dashboard = tester.element(find.byType(Dashboard)); final container = ProviderScope.containerOf(dashboard); - expect(container.read(navRailIndexStateProvider), 3); + expect(container.read(navRailIndexStateProvider), 2); // Verify that the SettingsPage is still displayed after the rebuild expect(find.byType(SettingsPage), findsOneWidget); - // expect(find.byType(IntroPage), findsNothing); expect(find.byType(HomePage), findsNothing); expect(find.byType(EnvironmentPage), findsNothing); }); @@ -218,17 +191,8 @@ void main() { // Verify that the selected icon is the filled version (selectedIcon) expect(find.byIcon(Icons.computer_rounded), findsOneWidget); - // // Go to IntroPage - // container.read(navRailIndexStateProvider.notifier).state = 2; - // await tester.pump(); - - // // Verify that the IntroPage is displayed - // expect(find.byType(IntroPage), findsOneWidget); - // // Verify that the selected icon is the filled version (selectedIcon) - // expect(find.byIcon(Icons.help), findsOneWidget); - // Go to SettingsPage - container.read(navRailIndexStateProvider.notifier).state = 3; + container.read(navRailIndexStateProvider.notifier).state = 2; await tester.pump(); // Verify that the SettingsPage is displayed From a5845d606f21d3801d5593ffc862fa56846d8a2a Mon Sep 17 00:00:00 2001 From: DenserMeerkat Date: Sat, 6 Jul 2024 15:36:39 +0530 Subject: [PATCH 2/5] refactor: move dialog to widgets --- lib/screens/dashboard.dart | 2 +- lib/screens/settings_page.dart | 1 - lib/{screens/about_dialog.dart => widgets/dialog_about.dart} | 0 lib/widgets/{dialogs.dart => dialog_rename.dart} | 0 lib/widgets/widgets.dart | 3 ++- 5 files changed, 3 insertions(+), 3 deletions(-) rename lib/{screens/about_dialog.dart => widgets/dialog_about.dart} (100%) rename lib/widgets/{dialogs.dart => dialog_rename.dart} (100%) diff --git a/lib/screens/dashboard.dart b/lib/screens/dashboard.dart index 92acda3e..f6c7d0f8 100644 --- a/lib/screens/dashboard.dart +++ b/lib/screens/dashboard.dart @@ -1,7 +1,7 @@ -import 'package:apidash/screens/about_dialog.dart'; import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:apidash/providers/providers.dart'; +import 'package:apidash/widgets/widgets.dart'; import 'package:apidash/consts.dart'; import 'common_widgets/common_widgets.dart'; import 'envvar/environment_page.dart'; diff --git a/lib/screens/settings_page.dart b/lib/screens/settings_page.dart index 98c9f529..c7426524 100644 --- a/lib/screens/settings_page.dart +++ b/lib/screens/settings_page.dart @@ -1,4 +1,3 @@ -import 'package:apidash/screens/about_dialog.dart'; import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import '../providers/providers.dart'; diff --git a/lib/screens/about_dialog.dart b/lib/widgets/dialog_about.dart similarity index 100% rename from lib/screens/about_dialog.dart rename to lib/widgets/dialog_about.dart diff --git a/lib/widgets/dialogs.dart b/lib/widgets/dialog_rename.dart similarity index 100% rename from lib/widgets/dialogs.dart rename to lib/widgets/dialog_rename.dart diff --git a/lib/widgets/widgets.dart b/lib/widgets/widgets.dart index 6b480b52..15f36376 100644 --- a/lib/widgets/widgets.dart +++ b/lib/widgets/widgets.dart @@ -10,7 +10,8 @@ export 'card_sidebar_request.dart'; export 'checkbox.dart'; export 'code_previewer.dart'; export 'codegen_previewer.dart'; -export 'dialogs.dart'; +export 'dialog_about.dart'; +export 'dialog_rename.dart'; export 'dropdown_codegen.dart'; export 'dropdown_content_type.dart'; export 'dropdown_formdata.dart'; From 86dbcdc583ca5136afc01ee77d3e4f5fd009c75e Mon Sep 17 00:00:00 2001 From: DenserMeerkat Date: Tue, 9 Jul 2024 13:40:27 +0530 Subject: [PATCH 3/5] fix: resizing --- lib/widgets/splitview_dashboard.dart | 8 ++- lib/widgets/splitview_equal.dart | 40 ++++++++------ lib/widgets/splt_cview_temp.dart | 80 ++++++++++++++++++++++++++++ pubspec.lock | 4 +- pubspec.yaml | 2 +- 5 files changed, 114 insertions(+), 20 deletions(-) create mode 100644 lib/widgets/splt_cview_temp.dart diff --git a/lib/widgets/splitview_dashboard.dart b/lib/widgets/splitview_dashboard.dart index ca89e729..938c7b9b 100644 --- a/lib/widgets/splitview_dashboard.dart +++ b/lib/widgets/splitview_dashboard.dart @@ -19,8 +19,10 @@ class DashboardSplitView extends StatefulWidget { class DashboardSplitViewState extends State { final MultiSplitViewController _controller = MultiSplitViewController( areas: [ - Area(id: "sidebar", size: 250, min: 200), - Area(id: "main", min: 0.7), + Area(id: "sidebar", min: 220, size: 250, max: 300), // Absolute values + Area(id: "main", min: 600), + // Area(id: "sidebar", flex: 0.3, min: 0.25), // Flex values + // Area(id: "main", flex: 0.7, min: 0.7), ], ); @@ -44,6 +46,8 @@ class DashboardSplitViewState extends State { ), child: MultiSplitView( controller: _controller, + sizeOverflowPolicy: SizeOverflowPolicy.shrinkFirst, + sizeUnderflowPolicy: SizeUnderflowPolicy.stretchLast, builder: (context, area) { return switch (area.id) { "sidebar" => widget.sidebarWidget, diff --git a/lib/widgets/splitview_equal.dart b/lib/widgets/splitview_equal.dart index 413d42fa..d1d4dc78 100644 --- a/lib/widgets/splitview_equal.dart +++ b/lib/widgets/splitview_equal.dart @@ -19,8 +19,8 @@ class EqualSplitView extends StatefulWidget { class _EqualSplitViewState extends State { final MultiSplitViewController _controller = MultiSplitViewController( areas: [ - Area(id: "left", min: kMinRequestEditorDetailsCardPaneSize), - Area(id: "right", min: kMinRequestEditorDetailsCardPaneSize), + Area(id: "left", min: 0.8), + Area(id: "right", min: 0.95), ], ); @@ -37,22 +37,32 @@ class _EqualSplitViewState extends State { animationEnabled: false, ), ), - child: MultiSplitView( - controller: _controller, - builder: (context, area) { - return switch (area.id) { - "left" => widget.leftWidget, - "right" => widget.rightWidget, - _ => Container(), - }; + child: LayoutBuilder( + builder: (context, constraints) { + return MultiSplitView( + controller: _controller, + // MultiSplitViewController( + // areas: [ + // Area(id: "left", size: constraints.maxWidth / 2, min: 240), + // Area(id: "right", size: constraints.maxWidth / 2, min: 260), + // ], + // ), + builder: (context, area) { + return switch (area.id) { + "left" => widget.leftWidget, + "right" => widget.rightWidget, + _ => Container(), + }; + }, + ); }, ), ); } - @override - void dispose() { - _controller.dispose(); - super.dispose(); - } +// @override +// void dispose() { +// _controller.dispose(); +// super.dispose(); +// } } diff --git a/lib/widgets/splt_cview_temp.dart b/lib/widgets/splt_cview_temp.dart new file mode 100644 index 00000000..90f20877 --- /dev/null +++ b/lib/widgets/splt_cview_temp.dart @@ -0,0 +1,80 @@ +import 'package:flutter/material.dart'; +import 'package:multi_split_view/multi_split_view.dart'; +import 'package:apidash/consts.dart'; + +class EqualSplitView extends StatefulWidget { + const EqualSplitView({ + super.key, + required this.leftWidget, + required this.rightWidget, + }); + + final Widget leftWidget; + final Widget rightWidget; + + @override + State createState() => _EqualSplitViewState(); +} + +class _EqualSplitViewState extends State { + // final MultiSplitViewController _controller = MultiSplitViewController( + // areas: [ + // Area(id: "left", min: kMinRequestEditorDetailsCardPaneSize), + // Area(id: "right", min: kMinRequestEditorDetailsCardPaneSize), + // ], + // ); + + getMinFractionWidth(double width) { + if (width < 900) { + return 0.9; + } else if (width < 1000) { + return 0.7; + } else if (width < 1200) { + return 0.5; + } else { + return 0.4; + } + } + + @override + Widget build(BuildContext context) { + return MultiSplitViewTheme( + data: MultiSplitViewThemeData( + dividerThickness: 3, + dividerPainter: DividerPainters.background( + color: Theme.of(context).colorScheme.surfaceContainerHighest, + highlightedColor: Theme.of(context).colorScheme.outline.withOpacity( + kHintOpacity, + ), + animationEnabled: false, + ), + ), + child: LayoutBuilder( + builder: (context, constraints) { + final minWidth = getMinFractionWidth(constraints.maxWidth); + return MultiSplitView( + controller: MultiSplitViewController( + areas: [ + Area(id: "left", flex: 1, min: minWidth), + Area(id: "right", flex: 1, min: minWidth), + ], + ), + builder: (context, area) { + return switch (area.id) { + "left" => widget.leftWidget, + "right" => widget.rightWidget, + _ => Container(), + }; + }, + ); + }, + ), + ); + } + +// @override +// void dispose() { +// _controller.dispose(); +// super.dispose(); +// } +} diff --git a/pubspec.lock b/pubspec.lock index 13ee81cf..0e8ed727 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -861,10 +861,10 @@ packages: dependency: "direct main" description: name: multi_split_view - sha256: "2ef6a7ff9d0957bf559075d2703507ea898c8b70e37ff5ac3636298370513b7a" + sha256: "1ee1974d9aae6bdc08e2abdead6066c914cefe4b0c5999cac1a2e4722fcf33ba" url: "https://pub.dev" source: hosted - version: "3.2.1" + version: "3.2.2" nested: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index 883128b2..3d7b371b 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -10,7 +10,7 @@ environment: dependencies: flutter: sdk: flutter - multi_split_view: ^3.2.1 + multi_split_view: ^3.2.2 url_launcher: ^6.2.5 flutter_riverpod: ^2.5.1 riverpod: ^2.5.1 From 5c5b6d117eb82e454382adbf65f611e9ab00ab11 Mon Sep 17 00:00:00 2001 From: DenserMeerkat Date: Tue, 9 Jul 2024 14:01:51 +0530 Subject: [PATCH 4/5] fix: rename temp file --- lib/widgets/{splt_cview_temp.dart => splitview_equal_temp.dart} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename lib/widgets/{splt_cview_temp.dart => splitview_equal_temp.dart} (100%) diff --git a/lib/widgets/splt_cview_temp.dart b/lib/widgets/splitview_equal_temp.dart similarity index 100% rename from lib/widgets/splt_cview_temp.dart rename to lib/widgets/splitview_equal_temp.dart From 73c249287fa2f4b98e58c6bfbc3be3380a46460e Mon Sep 17 00:00:00 2001 From: DenserMeerkat Date: Thu, 11 Jul 2024 01:08:16 +0530 Subject: [PATCH 5/5] fix: finalize splitviews --- lib/widgets/splitview_dashboard.dart | 6 +- lib/widgets/splitview_equal.dart | 48 +++++++--------- lib/widgets/splitview_equal_temp.dart | 80 --------------------------- 3 files changed, 23 insertions(+), 111 deletions(-) delete mode 100644 lib/widgets/splitview_equal_temp.dart diff --git a/lib/widgets/splitview_dashboard.dart b/lib/widgets/splitview_dashboard.dart index 938c7b9b..ad27204f 100644 --- a/lib/widgets/splitview_dashboard.dart +++ b/lib/widgets/splitview_dashboard.dart @@ -19,10 +19,8 @@ class DashboardSplitView extends StatefulWidget { class DashboardSplitViewState extends State { final MultiSplitViewController _controller = MultiSplitViewController( areas: [ - Area(id: "sidebar", min: 220, size: 250, max: 300), // Absolute values - Area(id: "main", min: 600), - // Area(id: "sidebar", flex: 0.3, min: 0.25), // Flex values - // Area(id: "main", flex: 0.7, min: 0.7), + Area(id: "sidebar", min: 220, size: 250, max: 350), + Area(id: "main", min: 400), ], ); diff --git a/lib/widgets/splitview_equal.dart b/lib/widgets/splitview_equal.dart index d1d4dc78..b8d0309a 100644 --- a/lib/widgets/splitview_equal.dart +++ b/lib/widgets/splitview_equal.dart @@ -2,7 +2,7 @@ import 'package:flutter/material.dart'; import 'package:multi_split_view/multi_split_view.dart'; import 'package:apidash/consts.dart'; -class EqualSplitView extends StatefulWidget { +class EqualSplitView extends StatelessWidget { const EqualSplitView({ super.key, required this.leftWidget, @@ -12,17 +12,17 @@ class EqualSplitView extends StatefulWidget { final Widget leftWidget; final Widget rightWidget; - @override - State createState() => _EqualSplitViewState(); -} - -class _EqualSplitViewState extends State { - final MultiSplitViewController _controller = MultiSplitViewController( - areas: [ - Area(id: "left", min: 0.8), - Area(id: "right", min: 0.95), - ], - ); + getMinFractionWidth(double width) { + if (width < 900) { + return 0.9; + } else if (width < 1000) { + return 0.7; + } else if (width < 1200) { + return 0.5; + } else { + return 0.4; + } + } @override Widget build(BuildContext context) { @@ -39,18 +39,18 @@ class _EqualSplitViewState extends State { ), child: LayoutBuilder( builder: (context, constraints) { + final minWidth = getMinFractionWidth(constraints.maxWidth); return MultiSplitView( - controller: _controller, - // MultiSplitViewController( - // areas: [ - // Area(id: "left", size: constraints.maxWidth / 2, min: 240), - // Area(id: "right", size: constraints.maxWidth / 2, min: 260), - // ], - // ), + controller: MultiSplitViewController( + areas: [ + Area(id: "left", flex: 1, min: minWidth), + Area(id: "right", flex: 1, min: minWidth), + ], + ), builder: (context, area) { return switch (area.id) { - "left" => widget.leftWidget, - "right" => widget.rightWidget, + "left" => leftWidget, + "right" => rightWidget, _ => Container(), }; }, @@ -59,10 +59,4 @@ class _EqualSplitViewState extends State { ), ); } - -// @override -// void dispose() { -// _controller.dispose(); -// super.dispose(); -// } } diff --git a/lib/widgets/splitview_equal_temp.dart b/lib/widgets/splitview_equal_temp.dart deleted file mode 100644 index 90f20877..00000000 --- a/lib/widgets/splitview_equal_temp.dart +++ /dev/null @@ -1,80 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:multi_split_view/multi_split_view.dart'; -import 'package:apidash/consts.dart'; - -class EqualSplitView extends StatefulWidget { - const EqualSplitView({ - super.key, - required this.leftWidget, - required this.rightWidget, - }); - - final Widget leftWidget; - final Widget rightWidget; - - @override - State createState() => _EqualSplitViewState(); -} - -class _EqualSplitViewState extends State { - // final MultiSplitViewController _controller = MultiSplitViewController( - // areas: [ - // Area(id: "left", min: kMinRequestEditorDetailsCardPaneSize), - // Area(id: "right", min: kMinRequestEditorDetailsCardPaneSize), - // ], - // ); - - getMinFractionWidth(double width) { - if (width < 900) { - return 0.9; - } else if (width < 1000) { - return 0.7; - } else if (width < 1200) { - return 0.5; - } else { - return 0.4; - } - } - - @override - Widget build(BuildContext context) { - return MultiSplitViewTheme( - data: MultiSplitViewThemeData( - dividerThickness: 3, - dividerPainter: DividerPainters.background( - color: Theme.of(context).colorScheme.surfaceContainerHighest, - highlightedColor: Theme.of(context).colorScheme.outline.withOpacity( - kHintOpacity, - ), - animationEnabled: false, - ), - ), - child: LayoutBuilder( - builder: (context, constraints) { - final minWidth = getMinFractionWidth(constraints.maxWidth); - return MultiSplitView( - controller: MultiSplitViewController( - areas: [ - Area(id: "left", flex: 1, min: minWidth), - Area(id: "right", flex: 1, min: minWidth), - ], - ), - builder: (context, area) { - return switch (area.id) { - "left" => widget.leftWidget, - "right" => widget.rightWidget, - _ => Container(), - }; - }, - ); - }, - ), - ); - } - -// @override -// void dispose() { -// _controller.dispose(); -// super.dispose(); -// } -}