【问题标题】:How to push multiple routes with Flutter Navigator如何使用 Flutter Navigator 推送多条路由
【发布时间】:2017-09-17 00:57:38
【问题描述】:

如果我将一条路由推送到我的应用程序的深处,有没有办法提供额外的路由以便可以自定义后退/向上导航?

【问题讨论】:

    标签: flutter


    【解决方案1】:

    您可以连续多次拨打Navigator.push();顶部下方的路线不会明显过渡,但它们会隐藏在下方。 (编辑:事实证明这不是真的,至少在 iOS 上,请参阅issue 12146)

    请注意,您还可以使用NavigatorState 的方法更改顶部路由下方的路由,例如removeRouteBelow 和replaceRouteBelow。这对于构建非线性导航体验很有用。

    【讨论】:

    • 谢谢! Flutter 是如何知道等待最后一次调用 Navigator.push() 的时间,是否应该将多个调用链接起来?
    • 事实证明,事实并非如此。我提交了github.com/flutter/flutter/issues/12146(如果您喜欢冒险,请自行修复)
    【解决方案2】:

    我通过连续推送多条路线没有动画解决了过渡可见性问题,从而解决了这个问题。到目前为止,它对我来说在 iOS 上运行良好。这是一种方法。

    通过扩展MaterialPageRoute 并覆盖buildTransitions 创建NoAnimationPageRoute:

    class NoAnimationPageRoute<T> extends MaterialPageRoute<T> {
      NoAnimationPageRoute({ WidgetBuilder builder }) : super(builder: builder);
    
      @override
      Widget buildTransitions(
          BuildContext context,
          Animation<double> animation,
          Animation<double> secondaryAnimation,
          Widget child) {
        return child;
      }
    }
    

    创建一个使用NoAnimationPageRoute的函数:

    Future<T> pushWithoutAnimation<T extends Object>(Widget page) {
      Route route = NoAnimationPageRoute(builder: (BuildContext context) => page);
      return Navigator.push(context, route);
    }
    

    连续多次调用函数:

    pushWithoutAnimation(Screen1());
    pushWithoutAnimation(Screen2());
    pushWithoutAnimation(Screen3());
    

    【讨论】:

    • @YuyaMatsuo 哦,伙计!刚刚用“NoAnimationPageRoute”更新了答案。我最初一定是匆忙发布的:/
    • 在 iOS 上,向后滑动手势似乎不适用于子类 NoAnimationPageRoutes。
    猜你喜欢
    • 2021-03-16
    • 1970-01-01
    • 2021-05-28
    • 2016-03-17
    • 2019-07-12
    • 2019-01-25
    • 1970-01-01
    • 2021-04-05
    • 2021-10-15
    相关资源
    最近更新 更多