【问题标题】:flutter navigation pop always pop to root颤振导航弹出总是弹出到根目录
【发布时间】:2019-12-25 17:24:29
【问题描述】:

我是 Flutter 的新手,但我遇到了导航弹出系统的问题。我不明白我的代码有什么问题,但是如果每次我按下手机上的后退按钮(而不是 AppBar 或其他任何东西)时,我应该检查我的代码,它会回到我页面的根目录,而不是上一页.但是当我使用自动创建的应用栏后退按钮按下返回时,它可以完美运行。

我试图通过将一些未通过的 BuildContext 传递给我的分离小部件来解决此问题,希望这是问题所在,但仍然无法正常工作

示例: 我有三页 A、B、C

A->B->C

A->B->D

A->B->E

当我在 B 上按下智能手机的后退按钮时,它会转到 A(工作)。

当我按下 C 上的 Scaffold appbar 后退按钮时,它转到 B(仍然有效),

但是,当我在 C、D 或 E 上按下智能手机的后退按钮时,它会转到 A(不起作用)

//this is where I initialize my route
class _LoginPageState extends State<LoginPage>{
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      routes: <String, WidgetBuilder> {
      '/main': (BuildContext context) => MainPage(),
      // '/b': (BuildContext context) => MyPage(title: 'page B'),
      // '/c': (BuildContext context) => MyPage(title: 'page C'),
    },
.....


// and this is how I push 
onPressed: () {
  Navigator.of(context).pushNamed('/main');
}

【问题讨论】:

  • 只要使用Navigator.of(context).pop();就会弹出到栈中的上一页
  • @SergioBernal 我没有在我的代码上初始化它,因为脚手架自动创建的后退按钮可以正常工作。但是我仍然不明白,当我使用智能手机的后退按钮时,我的工作方式与脚手架创建的按钮不一样:)
  • 好的,我明白了。如果你推到“页面 B”然后到“页面 C”,然后按下手机返回按钮会发生什么?
  • @SergioBernal 我已经用一些额外的解释更新了我上面的问题。感谢您继续提供帮助
  • 您是否尝试在 iOS 中运行您的项目,看看是否会发生相同的行为?

标签: flutter dart


【解决方案1】:

感谢@HassanSaleh 为我提供了有关材料应用程序的一些线索。我误解了使用材料应用程序路线。我在每个页面上初始化材料应用程序路由,并仔细阅读了关于导航页面的颤振开发食谱,发现我应该只将材料应用程序放在我的小部件堆栈的最顶部。所以对我来说,解决方法是在每个小部件上删除材料应用程序,只将一个材料应用程序及其路由放在非常根应用程序小部件上。也许我有不好的解释希望你们理解

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-01-11
    • 2021-06-11
    • 2016-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-14
    • 1970-01-01
    相关资源
    最近更新 更多