轻拍颤动的抽屉项目时,请防止将页面导航到当前页面

时间:2018-11-27 09:16:23

标签: dart flutter

假设我有一个抽屉,并且应用程序已经在“主页”页面中。

在抽屉中点击“设置”项时,它将再次导航到“设置”。

如何防止它,防止导航到与当前页面相同的页面。

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')));
            },
          ),
        ],
      ),
    );
  }

1 个答案:

答案 0 :(得分:1)

一个相当简单的解决方案是简单地禁用当前页面的按钮。您可以对所有页面进行枚举并传入“ currentPage”,然后在构建列表图块时可以执行类似onTap: currentPage == Pages.Search ? null : () { .... }

的操作

如果您想做一些更可配置的操作,则可以像为我的应用程序做的一样-对于我的抽屉菜单,我有一个列举所有选项(例如enum DrawerSections { home, profile, settings, about, logout }和我的抽屉类需要显示一个部分列表,因为我不想在每种情况下都显示所有菜单部分,您可以传入类似DrawerSectionSpec之类的列表,该列表具有DrawerSection和{{1} }。