在 Android 平台中,有个物理返回键,一样寻常默认可以返回上一个页面。Android 中 Activity 会提供返回键的监听函数,但是在 Flutter 中齐备皆是 Widget,它并没有像 Android 如许直接提供某个监听函数,而是通过 WillPopScope 组件来实现返回键的监听的。
1. WillPopScope
这是一个有状态组件,只必要将组件外包一层 WillPopScope 组件即可。
class WillPopScope extends StatefulWidget { const WillPopScope({ super.key, required this.child, required this.onWillPop, }) : assert(child != null); final Widget child; final WillPopCallback? onWillPop;}onWillPop 是一个 Future<bool> 函数,可以监听物理返回键变乱。如果返回 true,则会回退到上一个页面,如果返回 false,则直接拦截了物理返回键。
2. 在页面中利用
@override Widget build(BuildContext context) { var size = MediaQuery.of(context).size; return Scaffold( body: WillPopScope( child: Container(), onWillPop: () async { //这里可以相应物理返回键 return false; }), ); }在页面中利用时,只必要在 Scaffold 的 body 属性里包上一层 WillPopScope 。
3. 弹窗中制止物理返回键取消弹窗
showDialog( context: context, barrierDismissible: false, builder: (context) { return WillPopScope( child: AlertDialog( title: ' ', content: ' ', actions: actions, ), onWillPop: () async { //弹窗弹出后,按物理返回键,就不会取消弹窗了 return false; }); });可见,在 Flutter 中齐备皆 Widget,连一个物理返回键的变乱也是通过 Widget 来实现的。 |