【问题标题】:How to avoid duplicate screen on top in Flutter如何避免 Flutter 顶部出现重复屏幕
【发布时间】:2020-05-13 10:37:05
【问题描述】:

鉴于我已经在我的颤振应用程序的 MaterialApp 中声明了我的路线,现在我正在使用

Navigator.pushNamed(context,ScreenA);

现在在某些用户事件上,我需要打开 ScreenA,但前提是 ScreenA 不存在,否则只需更新该 ScreenA 中的参数。

【问题讨论】:

    标签: flutter flutter-navigation


    【解决方案1】:

    看看this。您可以等待从屏幕 A 打开的所有页面的结果,并在您弹回屏幕 A 后使用从这些页面返回的值

    【讨论】:

    • 实际上用例是 ScreenA 是一个屏幕主屏幕,它有 materialApp 现在 screenB 由于用户按钮单击而打开,然后通过 deepLink screenA 尝试再次打开 ScreenB,因此这个逻辑对我没有帮助。 WDYT?
    【解决方案2】:

    您可以检查当前的顶部屏幕并设置您的条件,如下所示,

    final newRouteName = "/NewRoute";       // Here add your route name 
    bool isNewRouteSameAsCurrent = false;
    
    Navigator.popUntil(context, (route) {
      if (route.settings.name == newRouteName) {
        isNewRouteSameAsCurrent = true;
      }
      return true;
    });
    
    if (!isNewRouteSameAsCurrent) {
      Navigator.pushNamed(context, newRouteName);
    }
    

    Refer.

    【讨论】:

    • 实际上用例是 ScreenA 是一个屏幕主屏幕,它有 materialApp 现在 screenB 由于用户按钮单击而打开,然后通过 deepLink screenA 尝试再次打开 ScreenB,因此这个逻辑对我没有帮助。从上面的这个开始,将从 screenA 的上下文中触发,因此它将清除 ScreenA 而不是 ScreenB
    • 这在您使用相同的屏幕上下文进行路由时有意义,否则它将显示使用上下文的屏幕的名称
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多