### 监听手机返回键(双击退出) ``` import 'package:Fluttertoast/Fluttertoast.dart'; //提示插件 class WillPopScopeTestRoute extends StatefulWidget { @override WillPopScopeTestRouteState createState() { return new WillPopScopeTestRouteState(); } } class WillPopScopeTestRouteState extends State<WillPopScopeTestRoute> { DateTime _lastpressedAt; //上次点击时间 var status = false; @override Widget build(BuildContext context) { return GestureDetector( onDoubleTap: (){return status=true;}, child: WillPopScope( onWillPop: () async { if (_lastpressedAt == null) { Fluttertoast.showToast( msg: "双击退出程序...", gravity: ToastGravity.BottOM, timeInSecForIos: 1, backgroundColor: Colors.grey[400], textColor: Colors.white, fontSize: ScreenUtil().setWidth(12), ); } if (_lastpressedAt == null || DateTime.Now().difference(_lastpressedAt) > Duration(seconds: 1)) { //两次点击间隔超过1秒则重新计时 _lastpressedAt = DateTime.Now(); return false; } return true; }, child: Pages(), ), ); } } main-MyApp中使用 home: WillPopScopeTestRoute(), ``` ### 监听手机返回键(单击返回桌面不退出app) ``` // MainActivity import android.os.Bundle; import android.view.KeyEvent; import io.Flutter.app.FlutterActivity; import io.Flutter.plugin.common.MethodCall; import io.Flutter.plugin.common.MethodChannel; import io.Flutter.plugins.GeneratedpluginRegistrant; //通讯名称,回到手机桌面 private final String CHANNEL = "android/back/desktop"; // onCreate方法下 new MethodChannel(getFlutterView(), CHANNEL).setMethodCallHandler( new MethodChannel.MethodCallHandler() { @Override public void onMethodCall(MethodCall methodCall, MethodChannel.Result result) { //通过methodCall可以获取参数和方法名 执行对应的平台业务逻辑即可 if (methodCall.method.equals("backDeskTop")) {//设置 当前Flutter页返回到手机桌面 result.success(true);
moveTaskToBack(false); // 调用返回事件 } } } ); // android_back_top文件 import 'package:Flutter/services.dart'; import 'package:Flutter/material.dart'; class AndroidBackTop { //初始化通信管道-设置退出到手机桌面 static const String CHANNEL = "android/back/desktop"; //设置回退到手机桌面 static Future<bool> backDeskTop() async { final platform = MethodChannel(CHANNEL); //通知安卓返回,到手机桌面 try { final bool out = await platform.invokeMethod('backDeskTop'); if (out) { debugPrint('设置成功'); } } on PlatformException catch (e) { debugPrint("通信失败(设置回退到安卓手机桌面:设置失败)"); print(e.toString()); } return Future.value(false); } } // main文件下使用 home: WillPopScope( onWillPop: () async { AndroidBackTop.backDeskTop(); return false; }, child: Pages(), ), ```
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。