【问题标题】:Flutter : Pressing back button closes two screensFlutter:按下后退按钮关闭两个屏幕
【发布时间】:2020-11-03 11:41:44
【问题描述】:

我已从仪表板导航到名为“A”的某个屏幕。在该屏幕中,我使用 ListView Builder 显示了一个列表。在那,单击 ListView 中的项目导航到另一个名为“B”的屏幕。当我在该屏幕“B”中按下返回按钮时,它导航到仪表板。但它必须导航到屏幕“A”。请帮我解决这个问题。

在仪表板中,我使用以下代码导航到屏幕“A”,

  _showSnackBar(BuildContext context, Item item) {
    switch(item.name)
    {
      
      case "Disputes":
        Navigator.push(context, MaterialPageRoute(builder: (context)=> Disputes()));
        break;
        
    }
  }
}

在屏幕“A”中,我使用以下代码导航到屏幕“B”,

 Card(
                                                child: ListTile(
                                                  onTap: () {
                                                    Navigator.push(
                                                        context,
                                                        MaterialPageRoute(
                                                            builder: (context) =>
                                                                SubmitDisputes(disputesId: disputeResList[index].id.toString())));
                                                  },
                                                  trailing: Icon(
                                                      Icons.remove_red_eye),
                                               
                                              ));
                                        }),
                                  ),
                                ),

当我在屏幕“B”中按下返回按钮时,它会导航到仪表板。但我需要根据 backstacks 导航到“A”。

请帮帮我!

【问题讨论】:

  • 看起来一切都很好,您是否尝试停止应用程序并重新启动它(不是热重载)?你是在代码中的某处调用.pop() 吗?
  • 不,不是。我仅在应用栏操作中添加 ``` .pop() ```。它发生在我按下 android 系统后退按钮或 IOS 向后滑动时。我也重新启动并创建了一个发布 apk。但不工作
  • 能否请您发布仪表板、租赁和提交争议的所有源代码?
  • @ikerfah 我用源代码编辑了帖子。请调查一下
  • 在您使用 Navigator 时可以使用rootNavigator: true 作为第二个参数吗? Navigator.of(context,rootNavigator: true).push(...)

标签: android ios flutter navigation


【解决方案1】:

正如 cmets 中所讨论的那样。使用Navigator.of(context,rootNavigator: true).push(...) 解决了这个问题。
但是你为什么一开始会遇到这个问题?因为您的应用中有多个MaterialApp。你必须只保留main.dart 中的一个作为根小部件。所以你有两个选择:

  1. 仅使用一个MaterialApp 作为根小部件并调用Navigator.of(context).push(...)
  2. 拥有多个MaterialApp并使用Navigator.of(context,rootNavigator: true).push(...)

如果您需要我的建议,请使用 1。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-06-04
    • 1970-01-01
    • 2014-01-22
    • 2019-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-27
    相关资源
    最近更新 更多