如果我在Flutter中将一个路由推入到我的应用程序的深处,是否有办法提供其他的路由,以便可以自定义后退/上一步导航?
如果我在Flutter中将一个路由推入到我的应用程序的深处,是否有办法提供其他的路由,以便可以自定义后退/上一步导航?
Navigator.push()
方法,在顶端路由下面的路由将不会有可见的过渡效果,但它们会被隐藏在下方。(注:最近发现这个说法在iOS上似乎不正确,请参考issue 12146)
请注意,您还可以使用NavigatorState
的方法来修改顶层路由下面的路由,比如removeRouteBelow
和replaceRouteBelow
。这对于构建非线性导航体验非常有用。
我通过推送多个没有动画的路由来解决过渡可见性问题。到目前为止,在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());