我想知道是否有一种方法可以使用不允许用户向后导航并保持主部件动画不变的导航器调用?我在启动画面和登录屏幕之间有一个英雄小部件图像过渡,但我想防止用户从启动画面中导航回来。Navigator.pushAndRemoveTill 和 Navigator.pushReplace kill animation都是过渡动画。
我的解决方案,主要是因为WillPopScope污染了另一个页面并阻止了Android上的硬件按钮,该按钮应该关闭应用程序:
Future<void> pushAndReplace(String routeName) async {
final current = ModalRoute.of(context);
Navigator.pushNamed(context, '/login');
await Future.delayed(Duration(milliseconds: 1));
Navigator.removeRoute(context, current);
}
您可以使用 WillPopScope
包装小部件,然后始终在 onWillPop
属性上返回false
,以防止它向后导航。例如;
return WillPopScope(
onWillPop: () async => Future.value(false),
child: Scaffold(
body: Container()
...
)
任何时候你使用Navigator.xxxx
你都会切换到一个全新的视图。我可能是错的,但我很确定动画需要包含在单个视图中,而不是在视图之间携带。
您可能需要研究使用状态来处理此问题。我使用 flutter_redux 来管理颤振应用程序中的状态。它最适合具有复杂状态的大型应用。对于简单的状态管理,您可以使用 Flutter 的内置状态功能。他们在这里有一个交互教程。