1. 程式人生 > 其它 >Flutter_04_實現連續兩次返回退出

Flutter_04_實現連續兩次返回退出

/// 封裝一個連續按兩次返回鍵退出頁面的元件
/// child 子元件
/// delay 兩次返回間隔時間
class UseWillPopScope extends StatefulWidget {
  final Widget child;
  final Duration delay;

  const UseWillPopScope(
      {Key? key, this.delay = const Duration(seconds: 1), required this.child})
      : super(key: key);

  @override
  _UseWillPopScopeState createState() => _UseWillPopScopeState();
}

class _UseWillPopScopeState extends State<UseWillPopScope> {
  DateTime? _lastWillPopAt;

  @override
  Widget build(BuildContext context) {
    return WillPopScope(
      child: widget.child,
      onWillPop: () async {
        print(_lastWillPopAt);
        if (_lastWillPopAt == null ||
            _lastWillPopAt != null &&
                DateTime.now().difference(_lastWillPopAt!) > widget.delay) {
          _lastWillPopAt = DateTime.now();
          Fluttertoast.showToast(
            msg: '再按一次退出Flutter Go',
            fontSize: 16.0,
            backgroundColor: Colors.grey,
            gravity: ToastGravity.CENTER,
          );
          return false;
        }
        return true;
      },
    );
  }
}