在APP中一些頁面為了防止用戶操作失誤點擊到返回鍵導致退出APP,可以設置其一定時間內點擊兩次返回鍵才允許退出APP,完成這個功能可以通過WillPopScope和SystemNavigator.pop實現
我們先來看一下效果:
要實現這個效果我們需要先在外層包裹WillPopScope用來監聽用戶點擊返回鍵
Widget build(BuildContext context) { return WillPopScope( child: Scaffold( body: Center( child: Text('點擊兩次返回退出APP'), ), ), onWillPop: (){ // 點擊返回鍵的操作 }, ); }
包裹好WillPopScope之后你會發現你再點擊返回鍵就沒效果了
然后我們需要先做好一個時間的判斷,比如兩次點擊在兩秒之內(可以通過difference對比兩個時間的時間差)即可進行退出操作
DateTime lastPopTime; @override Widget build(BuildContext context) { return WillPopScope( child: Scaffold( body: Center( child: Text('點擊兩次返回退出APP'), ), ), onWillPop: (){ // 點擊返回鍵的操作 if(lastPopTime == null || DateTime.now().difference(lastPopTime) > Duration(seconds: 2)){ lastPopTime = DateTime.now(); Toast.toast(context,msg: '再按一次退出'); }else{ lastPopTime = DateTime.now(); // 退出app } }, ); }
最后我們再通過執行SystemNavigator.pop完成退出,需引用
import 'package:flutter/services.dart';
最終代碼
DateTime lastPopTime; @override Widget build(BuildContext context) { return WillPopScope( child: Scaffold( appBar: AppBar( title: Text('點擊兩次返回退出APP',style: TextStyle(color: Colors.white,fontSize: 20),), ), body: Center( child: Text('點擊兩次返回退出APP'), ), ), onWillPop: () async{ // 點擊返回鍵的操作 if(lastPopTime == null || DateTime.now().difference(lastPopTime) > Duration(seconds: 2)){ lastPopTime = DateTime.now(); Toast.toast(context,msg: '再按一次退出'); }else{ lastPopTime = DateTime.now(); // 退出app await SystemChannels.platform.invokeMethod('SystemNavigator.pop'); } }, ); }
到這就可以實現啦~
Toast.toast();這個提示框是自己封裝的一個小組件,需要用到的可以看https://www.cnblogs.com/gxsyj/p/11018117.html