为了避免用户误触返回按钮而导致APP退出,在很多APP中都拦截了用户点击返回键的按钮,当用户在某一个时间段内点击两次时,才会认为用户是要退出(而非误触)。Flutter中的WillPopScope就可以用来完成该功能。
一、WillPopScope构造函数
WillPopScope({
Key key,
@required this.child,
@required this.onWillPop,
})
onWillPop是一个回调函数,当点击返回键时会触发onWIllPop,该回调函数返回一个布尔值。如果返回的false时,则当前路由不出栈(不会返回),最终值为true时,当前路由出栈退出。
二、示例
import 'package:flutter/material.dart';
class WillPopScopeDemo extends StatefulWidget {
@override
State<StatefulWidget> createState() {
// TODO: implement createState
return _WillPopScopeDemoState();
}
}
class _WillPopScopeDemoState extends State<WillPopScopeDemo> {
DateTime _lastPressedAt; //上次点击时间
@override
Widget build(BuildContext context) {
// TODO: implement build
return WillPopScope(
child: Center(
child: Text('1秒内连续按两次返回键退出'),
),
onWillPop: () async {
if (_lastPressedAt == null || DateTime.now().difference(_lastPressedAt) > Duration(seconds: 1)) {
_lastPressedAt = DateTime.now();
return false;
}
return true;
},
);
}
}