【发布时间】:2021-08-19 07:55:53
【问题描述】:
不确定如何在实现 Flutter 2.0 路由后清除堆栈并路由到新页面。
以下内容不起作用:
Navigator.of(context).pushAndRemoveUntil(MaterialPageRoute(builder: (context) => SignInPage()), (route) => false);
[VERBOSE-2:ui_dart_state.cc(186)] Unhandled Exception: 'package:flutter/src/widgets/navigator.dart': Failed assertion: line 3075 pos 7: '!hasPage || isWaitingForExitingDecision': A page-based route cannot be completed using imperative api, provide a new list without the corresponding Page to Navigator.pages instead.
【问题讨论】:
-
等等,你正在使用
MaterialApp.router和Navigator.of(context).pushAndRemoveUntil? -
我是。你知道如何使用 MaterialApp.router 完成这种类型的行为吗?它本质上是一个注销功能 -> 将用户带到登录屏幕,不要让他们“返回”应用程序。
-
错误提示如果您使用的是
MaterialApp.router,那么您不能使用pushAndRemoveUntil(“导航器的命令式api”)——相反,您需要使用路由器的api,更多:medium.com/flutter/… -
听起来没有一对一的替代方案,您需要在路由类中添加一个可以在整个应用程序中拉入的 ChangeNotifier。然后调用一个方法来处理整个路由器的状态更新。
class RoutePageManager extends ChangeNotifier { static RoutePageManager of(BuildContext context) { return Provider.of<RoutePageManager>(context, listen: false); } ...
标签: flutter dart flutter-navigation