【问题标题】:Flutter Navigator pushAndRemove Help (Not named routes)Flutter Navigator pushAndRemove 帮助(未命名路由)
【发布时间】:2021-04-09 17:22:46
【问题描述】:

我不在应用程序中使用命名路由。相反,在 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.
  },
);

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

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

提前致谢。

【问题讨论】:

    标签: flutter dart


    【解决方案1】:

    试过(Route&lt;dynamic&gt; route) =&gt; 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;
    );
    

    【讨论】:

    • 这不是命名路由。结果route.settings.namenull
    • null 怎么样?如果提供了任何名称,则路由的默认名称为/PageClassName
    猜你喜欢
    • 1970-01-01
    • 2021-08-22
    • 2021-03-16
    • 2021-05-28
    • 2019-01-25
    • 2018-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多