drawer: fixed navigation stack when opening setttings/about/debug

This commit is contained in:
Thibault Deckers 2020-09-05 10:10:09 +09:00
parent 994acc81f8
commit 385a8ee430
2 changed files with 17 additions and 7 deletions

View file

@ -208,6 +208,7 @@ class _AppDrawerState extends State<AppDrawer> {
Widget get settingsTile => NavTile(
icon: AIcons.settings,
title: 'Settings',
topLevel: false,
routeName: SettingsPage.routeName,
pageBuilder: (_) => SettingsPage(),
);
@ -215,6 +216,7 @@ class _AppDrawerState extends State<AppDrawer> {
Widget get aboutTile => NavTile(
icon: AIcons.info,
title: 'About',
topLevel: false,
routeName: AboutPage.routeName,
pageBuilder: (_) => AboutPage(),
);
@ -222,6 +224,7 @@ class _AppDrawerState extends State<AppDrawer> {
Widget get debugTile => NavTile(
icon: AIcons.debug,
title: 'Debug',
topLevel: false,
routeName: DebugPage.routeName,
pageBuilder: (_) => DebugPage(source: source),
);

View file

@ -9,6 +9,7 @@ class NavTile extends StatelessWidget {
final IconData icon;
final String title;
final Widget trailing;
final bool topLevel;
final String routeName;
final WidgetBuilder pageBuilder;
@ -16,6 +17,7 @@ class NavTile extends StatelessWidget {
@required this.icon,
@required this.title,
this.trailing,
this.topLevel = true,
@required this.routeName,
@required this.pageBuilder,
});
@ -42,14 +44,19 @@ class NavTile extends StatelessWidget {
onTap: () {
Navigator.pop(context);
if (routeName != context.currentRouteName) {
Navigator.pushAndRemoveUntil(
context,
MaterialPageRoute(
settings: RouteSettings(name: routeName),
builder: pageBuilder,
),
settings.navRemoveRoutePredicate(routeName),
final route = MaterialPageRoute(
settings: RouteSettings(name: routeName),
builder: pageBuilder,
);
if (topLevel) {
Navigator.pushAndRemoveUntil(
context,
route,
settings.navRemoveRoutePredicate(routeName),
);
} else {
Navigator.push(context, route);
}
}
},
selected: context.currentRouteName == routeName,