首页 > 解决方案 > Flutter Navigator pushAndRemove 帮助(未命名路由)

问题描述

我不在应用程序中使用命名路由。相反,受 FlutterBloc 库的启发,我使用了这样的路由定义。

class OrganizationPage extends StatelessWidget {
  static Route route() {
    return MaterialPageRoute<void>(builder: (_) => OrganizationPage());
  }

  // ....
}

我导航使用...

Navigator.push(
  context,
  LoginPage.route(),
);

假设从加载的角度来看,OrganizationPage我已经导航了几次。我想要一个按钮,它会弹出 OrganizationPage 路由 + 上面的所有其他内容并加载一个新页面。如何才能做到这一点?

我想过做一些这样的事情......

Navigator.pushAndRemoveUntil(
  context,
  HomePage.route(),
  (Route<dynamic> route) {
    // print("Checking route: $route");
    // return route.builder.toString().contains("OrganizationPage")
    // `builder` is not available, even though it did in the debugger.
  },
);

我想做的事能做到吗?如果有怎么办?

我假设如果我使用命名路由可能会更容易?不幸的是,我写了很多代码并且更喜欢避免重构。同样通过这种方式,我可以轻松地接受页面的任何参数。

提前致谢。

标签: flutterdart

解决方案


试过了(Route<dynamic> route) => route.settings.name == "/OrganizationPage"吗?

更新

使用问题中突出显示的方法不会产生路线名称。但是可以显式提供路由名称。

  static Route route() {
    return MaterialPageRoute<void>(
      builder: (_) => OrganizationPage(),
      settings: RouteSettings(name: '/OrganizationPage'),
    );
  }

现在路由有了名字,我们可以使用

Navigator.pushAndRemoveUntil(
  context,
  HomePage.route(),
  (Route<dynamic> route) => route.settings.name == OrganzationPage.route().settings.name;
);

推荐阅读