如何使用Flutter Navigator推送多条路线

Art*_*son 9 flutter

如果我将路线推后推到应用程序的较深部分,是否可以提供其他路线,以便可以自定义后退导航?

Col*_*son 7

您可以Navigator.push()连续拨打几次;顶部路线下方的路线不会明显过渡,但会隐藏在下方。(编辑:事实并非如此,至少在iOS上如此,请参见问题12146

请注意,您还可以在顶部路线如下ALTER航线使用的方法NavigatorState,比如removeRouteBelowreplaceRouteBelow。这对于构建非线性导航体验很有用。


Tou*_*der 7

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

NoAnimationPageRoute通过扩展MaterialPageRoute和覆盖创建一个buildTransitions

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;
  }
}
Run Code Online (Sandbox Code Playgroud)

创建一个函数,使用NoAnimationPageRoute

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

连续多次调用该函数:

pushWithoutAnimation(Screen1());
pushWithoutAnimation(Screen2());
pushWithoutAnimation(Screen3());
Run Code Online (Sandbox Code Playgroud)