【发布时间】:2017-09-17 00:57:38
【问题描述】:
如果我将一条路由推送到我的应用程序的深处,有没有办法提供额外的路由以便可以自定义后退/向上导航?
【问题讨论】:
标签: 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());
【讨论】: