如何解决Navigator.popUntil flutter 显示黑屏
我的项目中有两个不同的流程。
- 主页 -> 页面 A -> 页面 B -> 页面 C -> 页面 A
从页面 C 到页面 A,我使用此代码,效果很好。
Navigator.popUntil(context,ModalRoute.withName(AssetMenu.ROUTE));
- 当收到推送通知时,用户点击推送通知,我希望它像这样直接导航
主页 -> 页面 B -> 页面 C -> 然后点击页面 C 中的按钮返回页面 A。
但是点击C页的按钮时,显示黑屏。
我该如何处理?
解决方法
在您的第二个用例中,缺少 Page A
。当您调用 Navigator.popUntil()
时,导航器会向上移动路由堆栈并弹出它们,直到找到指定的路由。如果指定的路由不在堆栈中,它将删除路由,直到堆栈为空。这就是你得到黑屏的原因。
如果您想将 Main Page -> Page B -> Page C
变成 Main Page -> Page A
,您必须调用 Navigator.pushAndRemoveUntil()
,其中新路由是 Page A
并且谓词匹配 Main Page
。或者使用 Navigator.pushNamedAndRemoveUntil()
。
我建议使用名称路由,即使您的应用程序随着页面的增加而变得更大,也更容易。我更喜欢让 main.dart 之外的小部件和 dart 内部的小部件只使用逻辑和路由,然后在创建你需要 A、B、C 的那 3 个页面并在你的主要 dart 代码中设置你是第一页(主页) 必须是页面 A。
继续你的页面,在 Statefull{ 或 Stateless { 输入路由名称:
static const routeName = '/pageA';
static const routeName = '/pageB';
static const routeName = '/pageC';
在 main.dart 中定义路由:
home: WidgetFromPageA(),routes: {
WidgetFromPageB.routeName: (ctx) => WidgetFromPageB(),WidgetFromPageC.routeName: (ctx) => WidgetFromPageC(),},
您可以从任何页面调用此操作:
Navigator.of(context).pushNamed(WidgetFromPageA.routeName);
Navigator.of(context).pushNamed(WidgetFromPageB.routeName);
Navigator.of(context).pushNamed(WidgetFromPageC.routeName);
通过这种方式,您可以转到页面 B,并在应用栏中的新页面上获得返回按钮。 例如,当你在第二页时,使用pushReplacement()方法打开第三页,当你点击后退按钮时,你会跳到第一页并跳过第二页。
为了更清楚,你可以像这样导航到第四页:
[ 1 --push()--> 2 --pushReplacement()--> 3 --pushReplacement()--> 4]
,当您点击后退按钮时,您将进入第一页。
也许你可以试试这个
Navigator.of(context).pushAndRemoveUntil(MaterialPageRoute(builder: (context) => AssetMenu(),),(route) => route.isFirst);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。