注销
- 注销时应重置路由栈
- 将具有给定名称的路由推到最紧密包围给定上下文的导航器上,然后删除所有先前的路由,直到
predicate
返回true
。 - 要删除推送路由下的所有路由,请使用[RoutePredicate],它总是返回false(例如,
(Route<dynamic> route) => false
)。
Navigator.pushNamedAndRemoveUntil(context, "/app", (route) => route == null);
之前试过注销时手动执行
runApp(MyApp())
在执行第二次的时候会报错,小菜不知道为什么请高人指点。
双击退出
WillPopScope
注册一个回调onWillPop
用来自定义用户对路由的操作
自定义我们的回调函数,
Future<bool> _doubleExit() {
int nowTime = new DateTime.now().microsecondsSinceEpoch;
if (_lastClickTime != 0 && nowTime - _lastClickTime > 1500) {
return new Future.value(true);
} else {
_lastClickTime = new DateTime.now().microsecondsSinceEpoch;
new Future.delayed(const Duration(milliseconds: 1500), () {
_lastClickTime = 0;
});
return new Future.value(false);
}
}
将事先创建好的子节点 _getBody()
嵌套在 WillPopScope
中
Widget build(BuildContext context) {
return WillPopScope(
onWillPop: _doubleExit, // look here!
child: _getBody(),
);
}