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;
          }),
    );
  }

results matching ""

    No results matching ""