7.1 导航返回拦截(WillPopScope)
平时为防止用户返回误触发,或者不愿意用户返回,则可以用过WillPopScope
来判断是否可以用户返回。我们看下属性:
const WillPopScope({
...
@required WillPopCallback onWillPop,
@required Widget child
})
onWillPop
是回调函数,当用户点击返回键被调用(包括导航返回键和android物理按键),返回的是一个Future<bool>
对象,如果返回false
,当前路由不会pop
,当为true
,则退出当前路由。
例子
我们实现了一个返回弹窗提醒用户一次,是否真的 准备退出了。点击暂不退出退到当前路由,否则退到首页。
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('BaseWillPop'),
),
body: WillPopScope(
child: _body(),
onWillPop: () async {
//code
showDialog(
context: context,
child: CupertinoAlertDialog(
title: Text('提示'),
content: Text('真的退出吗?'),
actions: <Widget>[
FlatButton(
child: Text('真的 退出了'),
onPressed: () {
Navigator.of(context).popUntil((route) {
return route.isFirst;
});
},
),
FlatButton(
child: Text('暂不退出了'),
onPressed: () {
Navigator.maybePop(context);
},
),
],
));
return false;
}),
);
}