0
点赞
收藏
分享

微信扫一扫

(Flutter)导航返回拦截: WillPopScope

钟罗敏 2022-02-11 阅读 61
flutterdart

1. 计算两个日期的时间差

DateTime.now().difference(_lastPressedAt!)
//使用 difference 方法,就能获取到所有时间单位的差值

其中,DateTimedifference 方法 返回的是一个 Duration 对象Duration 是用来表示 时间跨度(差值)的类。

参考文章:
Flutter 计算两个日期的时间差

小白不止如此 :(Dart)用法补充

2. 导航返回拦截: WillPopScope

  DateTime? _lastPressedAt; //上次点击时间

  @override
  Widget build(BuildContext context) {
    return WillPopScope(
      child: Scaffold(
        body: Container(
          alignment: Alignment.center,
          child: Text("2秒内连续按两次返回键退出"),
        ),
      ),
      onWillPop: () async {
        if (_lastPressedAt == null || DateTime.now().difference(_lastPressedAt!) > Duration(seconds: 2)) {
          //两次点击间隔超过2秒则重新计时
          _lastPressedAt = DateTime.now();
          Fluttertoast.showToast(
            msg: '再按一次退出!',
            toastLength: Toast.LENGTH_SHORT,
            gravity: ToastGravity.CENTER,
            timeInSecForIosWeb: 2,
            backgroundColor: Colors.black87,
            textColor: Colors.white,
          );
          return false;//当前路由不出栈(不会返回)
        }
        return true;//当前路由出栈退出
      },
    );
  }

导航返回拦截效果图

举报

相关推荐

0 条评论