目录
在安卓手机上才会有物理返回键,而ios手机是没有的,所以说这个是安卓手机独有的功能。
使用场景:当用户在某一段时间内连续点击两次返回键,才会被认为是退出应用。
在Flutter中想实现这个功能,首先我们先来认识一个Flutter中的组件WillPopScope,在Flutter中我们是用这个组件来实现物理返回键拦截的,从而实现点击两返回键退出应用。
onWillPop是他的一个回调函数,当用户点击返回按钮时被调用(Android物理返回按钮),该回调需要返回一个Future
对象,如果返回的Future
最终值为false
时,则当前路由不出栈(不会返回);最终值为true
时,当前路由出栈退出。我们需要提供这个回调来决定是否退出。
1.App组件
DateTime? lastPopTime;
onWillPop: () async { if (lastPopTime == null || DateTime.now().difference(lastPopTime!) > Duration(seconds: 1)) { lastPopTime = DateTime.now(); ToastUtils.showToast("再按一次退出"); return Future.value(false); } else { lastPopTime = DateTime.now(); // 退出app return Future.value(true); } });
2.InAppWebview组件
DateTime? lastPopTime;
onWillPop: () async { // webViewController?.goBack(); // return Future.value(false); if (lastPopTime == null || DateTime.now().difference(lastPopTime!) > Duration(seconds: 1)) { lastPopTime = DateTime.now(); if (await webViewController?.canGoBack() == true) { await webViewController?.goBack(); } else { ToastUtils.showToast("再按一次退出"); } return Future.value(false); } else { lastPopTime = DateTime.now(); // 退出app return Future.value(true); // await SystemChannels.platform.invokeMethod('SystemNavigator.pop'); } });