微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

flutter 监听返回键

### 监听手机返回键(双击退出)
```
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] 举报,一经查实,本站将立刻删除。

相关推荐