假设我有一个抽屉,并且应用程序已经在“主页”页面中。
在抽屉中点击“设置”项时,它将再次导航到“设置”。
如何防止它,防止导航到与当前页面相同的页面。
Widget build(BuildContext context) {
return new Drawer(
child: new ListView(
children: <Widget>[
new ListTile(
title: new Text("Home"),
trailing: new Icon(Icons.local_florist),
onTap: (){
Navigator.of(context).pop();
Navigator.of(context).push(new MaterialPageRoute(builder: (BuildContext context) => new HomePage()));
Navigator.pushNamedAndRemoveUntil(context, '/', (_) => false);
},
),
new ListTile(
title: new Text("Search"),
trailing: new Icon(Icons.search),
onTap: (){
Navigator.of(context).pop();
Navigator.of(context).push(new MaterialPageRoute(builder: (BuildContext context) => new SearchPage('Search Web')));
},
),
new Divider(),
new ListTile(
title: new Text("Settings"),
trailing: new Icon(Icons.settings),
onTap: (){
Navigator.of(context).pop();
Navigator.of(context).push(new MaterialPageRoute(builder: (BuildContext context) => new SettingsPage('Settings Center')));
},
),
],
),
);
}
答案 0 :(得分:1)
一个相当简单的解决方案是简单地禁用当前页面的按钮。您可以对所有页面进行枚举并传入“ currentPage”,然后在构建列表图块时可以执行类似onTap: currentPage == Pages.Search ? null : () { .... }
如果您想做一些更可配置的操作,则可以像为我的应用程序做的一样-对于我的抽屉菜单,我有一个列举所有选项(例如enum DrawerSections { home, profile, settings, about, logout }
和我的抽屉类需要显示一个部分列表,因为我不想在每种情况下都显示所有菜单部分,您可以传入类似DrawerSectionSpec之类的列表,该列表具有DrawerSection
和{{1} }。