1- import 'package:apidash/consts .dart' ;
1+ import 'package:apidash/widgets/splitviews .dart' ;
22import 'package:flutter/material.dart' ;
33import 'package:flutter/services.dart' ;
44import 'package:flutter_riverpod/flutter_riverpod.dart' ;
55import 'package:inner_drawer/inner_drawer.dart' ;
66import 'package:flex_color_scheme/flex_color_scheme.dart' ;
77import 'package:apidash/extensions/extensions.dart' ;
88import 'package:apidash/providers/providers.dart' ;
9+ import '../intro_page.dart' ;
10+ import '../settings_page.dart' ;
911import 'navbar.dart' ;
10- import 'widgets/left_drawer.dart' ;
1112import 'requests_page.dart' ;
1213import 'response_drawer.dart' ;
1314import '../home_page/collection_pane.dart' ;
15+ import 'widgets/page_base.dart' ;
1416
1517class MobileDashboard extends ConsumerStatefulWidget {
1618 const MobileDashboard ({super .key});
@@ -20,31 +22,14 @@ class MobileDashboard extends ConsumerStatefulWidget {
2022}
2123
2224class _MobileDashboardState extends ConsumerState <MobileDashboard > {
23- late Color backgroundColor;
24- bool isLeftDrawerOpen = false ;
25- ValueNotifier <double > dragPosition = ValueNotifier (0 );
26- ValueNotifier <InnerDrawerDirection ?> drawerDirection =
27- ValueNotifier (InnerDrawerDirection .start);
28-
29- Color calculateBackgroundColor (double dragPosition) {
30- Color start = Theme .of (context).colorScheme.surface;
31- Color end = Theme .of (context).colorScheme.onInverseSurface;
32- return dragPosition == 0 ? start : end;
33- }
34-
35- @override
36- void dispose () {
37- super .dispose ();
38- dragPosition.dispose ();
39- drawerDirection.dispose ();
40- }
41-
4225 @override
4326 Widget build (
4427 BuildContext context,
4528 ) {
29+ final railIdx = ref.watch (navRailIndexStateProvider);
4630 final GlobalKey <InnerDrawerState > innerDrawerKey =
4731 ref.watch (mobileDrawerKeyProvider);
32+ final isLeftDrawerOpen = ref.watch (leftDrawerStateProvider);
4833 return AnnotatedRegion <SystemUiOverlayStyle >(
4934 value: FlexColorScheme .themedSystemNavigationBar (
5035 context,
@@ -54,65 +39,9 @@ class _MobileDashboardState extends ConsumerState<MobileDashboard> {
5439 child: Stack (
5540 alignment: AlignmentDirectional .bottomCenter,
5641 children: [
57- InnerDrawer (
58- key: innerDrawerKey,
59- swipe: true ,
60- swipeChild: true ,
61- onTapClose: true ,
62- offset: ! context.isCompactWindow
63- ? const IDOffset .only (left: 0.1 , right: 1 )
64- : const IDOffset .only (left: 0.7 , right: 1 ),
65- boxShadow: [
66- BoxShadow (
67- offset: const Offset (1 , 0 ),
68- color: Theme .of (context).colorScheme.onInverseSurface,
69- blurRadius: 0 ,
70- ),
71- ],
72- colorTransitionChild: Colors .transparent,
73- colorTransitionScaffold: Colors .transparent,
74- rightAnimationType: InnerDrawerAnimation .linear,
75- backgroundDecoration: BoxDecoration (
76- color: Theme .of (context).colorScheme.onInverseSurface),
77- onDragUpdate: (value, direction) {
78- drawerDirection.value = direction;
79- if (value > 0.98 && direction == InnerDrawerDirection .start) {
80- dragPosition.value = 1 ;
81- } else {
82- dragPosition.value = 0 ;
83- }
84- },
85- innerDrawerCallback: (isOpened) {
86- if (drawerDirection.value == InnerDrawerDirection .start) {
87- setState (() {
88- isLeftDrawerOpen = isOpened;
89- });
90- }
91- },
92- leftChild: const LeftDrawer (
93- drawerContent: CollectionPane (),
94- ),
95- rightChild: const ResponseDrawer (),
96- scaffold: ValueListenableBuilder <double >(
97- valueListenable: dragPosition,
98- builder: (context, value, child) {
99- return Container (
100- color: calculateBackgroundColor (value),
101- child: child,
102- );
103- },
104- child: ClipRRect (
105- borderRadius:
106- const BorderRadius .only (topLeft: Radius .circular (8 )),
107- child: SafeArea (
108- minimum: kIsWindows || kIsMacOS ? kPt28 : EdgeInsets .zero,
109- bottom: false ,
110- child: RequestsPage (
111- innerDrawerKey: innerDrawerKey,
112- ),
113- ),
114- ),
115- ),
42+ PageBranch (
43+ pageIndex: railIdx,
44+ innerDrawerKey: innerDrawerKey,
11645 ),
11746 if (context.isCompactWindow)
11847 AnimatedPositioned (
@@ -131,3 +60,53 @@ class _MobileDashboardState extends ConsumerState<MobileDashboard> {
13160 );
13261 }
13362}
63+
64+ class PageBranch extends StatelessWidget {
65+ const PageBranch ({
66+ super .key,
67+ required this .pageIndex,
68+ required this .innerDrawerKey,
69+ });
70+
71+ final int pageIndex;
72+ final GlobalKey <InnerDrawerState > innerDrawerKey;
73+
74+ @override
75+ Widget build (BuildContext context) {
76+ switch (pageIndex) {
77+ case 1 :
78+ return TwoDrawerSplitView (
79+ key: const ValueKey ('env' ),
80+ innerDrawerKey: innerDrawerKey,
81+ offset: ! context.isCompactWindow
82+ ? const IDOffset .only (left: 0.1 )
83+ : const IDOffset .only (left: 0.7 ),
84+ leftDrawerContent: const SizedBox (),
85+ mainContent: const SizedBox (),
86+ );
87+ case 2 :
88+ return const PageBase (
89+ title: 'About' ,
90+ scaffoldBody: IntroPage (),
91+ );
92+ case 3 :
93+ return const PageBase (
94+ title: 'Settings' ,
95+ scaffoldBody: SettingsPage (),
96+ );
97+ default :
98+ return TwoDrawerSplitView (
99+ key: const ValueKey ('home' ),
100+ innerDrawerKey: innerDrawerKey,
101+ offset: ! context.isCompactWindow
102+ ? const IDOffset .only (left: 0.1 , right: 1 )
103+ : const IDOffset .only (left: 0.7 , right: 1 ),
104+ leftDrawerContent: const CollectionPane (),
105+ rightDrawerContent: const ResponseDrawer (),
106+ mainContent: RequestsPage (
107+ innerDrawerKey: innerDrawerKey,
108+ ),
109+ );
110+ }
111+ }
112+ }
0 commit comments