Flutter 注销和双击退出

注销

  • 注销时应重置路由栈

static Future<T> pushNamedAndRemoveUntil<T extends Object>(BuildContext context, String newRouteName, RoutePredicate predicate)

  • 将具有给定名称的路由推到最紧密包围给定上下文的导航器上,然后删除所有先前的路由,直到 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(),
    );
  }
    原文作者:树_生
    原文地址: https://www.jianshu.com/p/6cf9d08331ac
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞