【问题标题】:How to remove last two screen如何删除最后两个屏幕
【发布时间】:2021-12-24 12:40:21
【问题描述】:

我有一些屏幕 - (A-B-C-D-E-F),我想从 F 屏幕删除 D-E-F 屏幕并登陆到 C 屏幕。所以在堆栈中筛选:(A-B-C)。 你能告诉我我该怎么做吗? 我已经尝试过了:

 Get.offUntil(MaterialPageRoute(builder: (context) => Second()),(Route<dynamic> route) => false);

Navigator.of(context).pushAndRemoveUntil(MaterialPageRoute(builder: (context) =>
                          Second()), (Route<dynamic> route) => false);
                    }),

但不工作。

【问题讨论】:

    标签: flutter routes navigation flutter-getx


    【解决方案1】:

    试试这个

    Navigator.popUntil(context, ModalRoute.withName('/c'));

    或者你可以简单地弹出3次

    Navigator.of(context)..pop()..pop()..pop();

    【讨论】:

    • 你能解释一下我如何使用 GetX 来实现这一点。而且我不想使用 back(), back()。
    【解决方案2】:

    在您的第三条路线上执行此操作

    Navigator.pushReplacement(   context,   MaterialPageRoute(settings: RouteSettings(name: "Foo")), );
    

    你可以在最后的屏幕上调用它。

    Navigator.popUntil(context, ModalRoute.withName("Foo"));
    

    【讨论】:

    • 你能解释一下我如何使用 GetX 来实现这一点。
    【解决方案3】:

    对于跳过两个屏幕,例如 - 我的堆栈中的 A-B-C-D-F 屏幕,我想通过删除堆栈中的所有上部屏幕来转到 B,然后最终堆栈是 A-B.

    在屏幕 B 中

    Navigator.pushReplacement(
                    context,
                    MaterialPageRoute(
                        settings: RouteSettings(name: "Foo"),
                        builder: (BuildContext context) => Third()),
                  );
    

    在屏幕 F

    Navigator.popUntil(context, ModalRoute.withName("Foo"));
    

    它工作得很好但是我们可以在 GetX 中实现这一点。

    【讨论】:

      【解决方案4】:

      当我们将表单移动到另一个屏幕时,然后使用:

      Get.toNamed(RoutersConst.third);
      

      然后从堆栈中删除屏幕然后使用

      Get.until((route) => route.settings.name == RoutersConst.second);
      

      【讨论】:

        【解决方案5】:

        如果你有一堆页面 A-B-C-D-E 并且想使用 get x 将 F 压入堆栈,它看起来像这样

        Get.to(F())
        

        Get.toName('/F')
        

        除此之外,使用命名路由使事情变得更容易 如果你有一堆页面 A-B-C-D-E 并且想要将 F 压入堆栈但弹出 D 和 E 那么它看起来像这样

        Get.offNamedUntil('/F', ModalRoute.withName('/C')
        

        这会给你一堆 A-B-C-F

        如果你有一堆 A-B-C-D-E-F 并且想要弹出直到 C 则它看起来像这样

        Get.until((route) => Get.currentRoute == '/C')
        

        这会给你一堆 A-B-C 在一行代码中弹出 D-E-F

        Here is a video showing the above code working

        【讨论】:

        • 请分享那些实际可行的解决方案,或者您尝试一下。
        • 这绝对有效,但我会更新我的答案以更好地通知你
        猜你喜欢
        • 1970-01-01
        • 2020-07-21
        • 2015-04-07
        • 1970-01-01
        • 2017-08-02
        • 1970-01-01
        • 2011-10-27
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多