From f239fbbed600d42f6dc5550a2c195c97bd774cc9 Mon Sep 17 00:00:00 2001 From: LittleSheep Date: Thu, 27 Jun 2024 15:50:13 +0800 Subject: [PATCH] :bug: Fix bottom navigation everywhere --- lib/router.dart | 6 ------ lib/shells/nav_shell.dart | 18 +++++++++++++++--- lib/widgets/navigation/app_navigation.dart | 3 +++ 3 files changed, 18 insertions(+), 9 deletions(-) diff --git a/lib/router.dart b/lib/router.dart index a1018cb..acedfe8 100644 --- a/lib/router.dart +++ b/lib/router.dart @@ -53,7 +53,6 @@ abstract class AppRouter { path: '/posts/view/:alias', name: 'postDetail', builder: (context, state) => TitleShell( - showAppBar: SolianTheme.isExtraLargeScreen(context), state: state, child: PostDetailScreen( alias: state.pathParameters['alias']!, @@ -119,7 +118,6 @@ abstract class AppRouter { builder: (context, state) { final arguments = state.extra as ChannelDetailArguments; return TitleShell( - showAppBar: SolianTheme.isExtraLargeScreen(context), state: state, child: ChannelDetailScreen( channel: arguments.channel, @@ -152,7 +150,6 @@ abstract class AppRouter { path: '/realms/:alias/detail', name: 'realmDetail', builder: (context, state) => TitleShell( - showAppBar: SolianTheme.isExtraLargeScreen(context), state: state, child: RealmDetailScreen( realm: state.extra as Realm, @@ -202,7 +199,6 @@ abstract class AppRouter { path: '/account/friend', name: 'accountFriend', builder: (context, state) => TitleShell( - showAppBar: SolianTheme.isExtraLargeScreen(context), state: state, child: const FriendScreen(), ), @@ -211,7 +207,6 @@ abstract class AppRouter { path: '/account/personalize', name: 'accountPersonalize', builder: (context, state) => TitleShell( - showAppBar: SolianTheme.isExtraLargeScreen(context), state: state, child: const PersonalizeScreen(), ), @@ -220,7 +215,6 @@ abstract class AppRouter { path: '/about', name: 'about', builder: (context, state) => TitleShell( - showAppBar: SolianTheme.isExtraLargeScreen(context), state: state, child: const AboutScreen(), ), diff --git a/lib/shells/nav_shell.dart b/lib/shells/nav_shell.dart index b02ab27..144d18d 100644 --- a/lib/shells/nav_shell.dart +++ b/lib/shells/nav_shell.dart @@ -3,6 +3,7 @@ import 'package:get/get.dart'; import 'package:go_router/go_router.dart'; import 'package:solian/router.dart'; import 'package:solian/theme.dart'; +import 'package:solian/widgets/navigation/app_navigation.dart'; import 'package:solian/widgets/prev_page.dart'; import 'package:solian/widgets/navigation/app_navigation_bottom_bar.dart'; import 'package:solian/widgets/navigation/app_navigation_rail.dart'; @@ -11,6 +12,8 @@ import 'package:solian/widgets/sidebar/sidebar_placeholder.dart'; class NavShell extends StatelessWidget { final bool showAppBar; final bool showSidebar; + final bool showNavigation; + final bool? showBottomNavigation; final GoRouterState state; final Widget child; @@ -23,6 +26,8 @@ class NavShell extends StatelessWidget { required this.state, this.showAppBar = true, this.showSidebar = true, + this.showNavigation = true, + this.showBottomNavigation, this.sidebarFirst = false, this.sidebar, }); @@ -47,6 +52,11 @@ class NavShell extends StatelessWidget { Widget build(BuildContext context) { final canPop = AppRouter.instance.canPop(); + final routeName = + AppRouter.instance.routerDelegate.currentConfiguration.last.route.name; + final showBottom = showBottomNavigation ?? + AppNavigation.destinationPages.contains(routeName); + return Scaffold( appBar: showAppBar ? AppBar( @@ -58,14 +68,16 @@ class NavShell extends StatelessWidget { automaticallyImplyLeading: false, ) : null, - bottomNavigationBar: SolianTheme.isLargeScreen(context) + bottomNavigationBar: (SolianTheme.isLargeScreen(context) || + !(showNavigation && showBottom)) ? null : const AppNavigationBottomBar(), body: SolianTheme.isLargeScreen(context) ? Row( children: [ - const AppNavigationRail(), - const VerticalDivider(thickness: 0.3, width: 1), + if (showNavigation) const AppNavigationRail(), + if (showNavigation) + const VerticalDivider(thickness: 0.3, width: 1), if (showSidebar && sidebarFirst) ...buildContent(context).reversed else if (showSidebar) diff --git a/lib/widgets/navigation/app_navigation.dart b/lib/widgets/navigation/app_navigation.dart index 3883c81..7c2f955 100644 --- a/lib/widgets/navigation/app_navigation.dart +++ b/lib/widgets/navigation/app_navigation.dart @@ -24,6 +24,9 @@ abstract class AppNavigation { page: 'account', ), ]; + + static List get destinationPages => + AppNavigation.destinations.map((x) => x.page).toList(); } class AppNavigationDestination {