drawer: fixed navigation stack when opening setttings/about/debug
This commit is contained in:
parent
994acc81f8
commit
385a8ee430
2 changed files with 17 additions and 7 deletions
|
@ -208,6 +208,7 @@ class _AppDrawerState extends State<AppDrawer> {
|
||||||
Widget get settingsTile => NavTile(
|
Widget get settingsTile => NavTile(
|
||||||
icon: AIcons.settings,
|
icon: AIcons.settings,
|
||||||
title: 'Settings',
|
title: 'Settings',
|
||||||
|
topLevel: false,
|
||||||
routeName: SettingsPage.routeName,
|
routeName: SettingsPage.routeName,
|
||||||
pageBuilder: (_) => SettingsPage(),
|
pageBuilder: (_) => SettingsPage(),
|
||||||
);
|
);
|
||||||
|
@ -215,6 +216,7 @@ class _AppDrawerState extends State<AppDrawer> {
|
||||||
Widget get aboutTile => NavTile(
|
Widget get aboutTile => NavTile(
|
||||||
icon: AIcons.info,
|
icon: AIcons.info,
|
||||||
title: 'About',
|
title: 'About',
|
||||||
|
topLevel: false,
|
||||||
routeName: AboutPage.routeName,
|
routeName: AboutPage.routeName,
|
||||||
pageBuilder: (_) => AboutPage(),
|
pageBuilder: (_) => AboutPage(),
|
||||||
);
|
);
|
||||||
|
@ -222,6 +224,7 @@ class _AppDrawerState extends State<AppDrawer> {
|
||||||
Widget get debugTile => NavTile(
|
Widget get debugTile => NavTile(
|
||||||
icon: AIcons.debug,
|
icon: AIcons.debug,
|
||||||
title: 'Debug',
|
title: 'Debug',
|
||||||
|
topLevel: false,
|
||||||
routeName: DebugPage.routeName,
|
routeName: DebugPage.routeName,
|
||||||
pageBuilder: (_) => DebugPage(source: source),
|
pageBuilder: (_) => DebugPage(source: source),
|
||||||
);
|
);
|
||||||
|
|
|
@ -9,6 +9,7 @@ class NavTile extends StatelessWidget {
|
||||||
final IconData icon;
|
final IconData icon;
|
||||||
final String title;
|
final String title;
|
||||||
final Widget trailing;
|
final Widget trailing;
|
||||||
|
final bool topLevel;
|
||||||
final String routeName;
|
final String routeName;
|
||||||
final WidgetBuilder pageBuilder;
|
final WidgetBuilder pageBuilder;
|
||||||
|
|
||||||
|
@ -16,6 +17,7 @@ class NavTile extends StatelessWidget {
|
||||||
@required this.icon,
|
@required this.icon,
|
||||||
@required this.title,
|
@required this.title,
|
||||||
this.trailing,
|
this.trailing,
|
||||||
|
this.topLevel = true,
|
||||||
@required this.routeName,
|
@required this.routeName,
|
||||||
@required this.pageBuilder,
|
@required this.pageBuilder,
|
||||||
});
|
});
|
||||||
|
@ -42,14 +44,19 @@ class NavTile extends StatelessWidget {
|
||||||
onTap: () {
|
onTap: () {
|
||||||
Navigator.pop(context);
|
Navigator.pop(context);
|
||||||
if (routeName != context.currentRouteName) {
|
if (routeName != context.currentRouteName) {
|
||||||
Navigator.pushAndRemoveUntil(
|
final route = MaterialPageRoute(
|
||||||
context,
|
settings: RouteSettings(name: routeName),
|
||||||
MaterialPageRoute(
|
builder: pageBuilder,
|
||||||
settings: RouteSettings(name: routeName),
|
|
||||||
builder: pageBuilder,
|
|
||||||
),
|
|
||||||
settings.navRemoveRoutePredicate(routeName),
|
|
||||||
);
|
);
|
||||||
|
if (topLevel) {
|
||||||
|
Navigator.pushAndRemoveUntil(
|
||||||
|
context,
|
||||||
|
route,
|
||||||
|
settings.navRemoveRoutePredicate(routeName),
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
Navigator.push(context, route);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
selected: context.currentRouteName == routeName,
|
selected: context.currentRouteName == routeName,
|
||||||
|
|
Loading…
Reference in a new issue