本篇为继上片监听返回键基础下优化:

以下做返回键监听两种情况:

import 'package:fluttertoast/fluttertoast.dart';  //提示第三方插件

1. 单击提示双击退出,双击时退出App

DateTime _lastPressedAt; //上次点击时间

main.dart-MyApp中:
home: WillPopScope( // 监听返回键WidgetonWillPop: () 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(),
),

2. 单击返回手机桌面,不退出App

main.dart文件

import 'package:flutter_smart_park/untils/android_back_desktop.dart';home: WillPopScope(onWillPop: () async {AndroidBackTop.backDeskTop();return false;},child: configProvide.token == '0' ? UserLogIn() : Pages(),
),

android_back_desktop.dart

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);}
}

需在MainActivity.java文件中添加配置:

import android.os.Bundle;
import android.view.KeyEvent;import io.flutter.app.FlutterActivity; import io.flutter.plugins.GeneratedPluginRegistrant;
import io.flutter.plugin.common.MethodCall;
import io.flutter.plugin.common.MethodChannel; 

public class MainActivity extends FlutterActivity { //通讯名称,回到手机桌面private  final String CHANNEL = "android/back/desktop";@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);GeneratedPluginRegistrant.registerWith(this);

    MethodChannel(getFlutterView(), CHANNEL).setMethodCallHandler(MethodChannel.MethodCallHandler() {@Overridepublic void onMethodCall(MethodCall methodCall, MethodChannel.Result result) {if (methodCall.method.equals("backDesktop")) {result.success(true);moveTaskToBack(false);  //是否关闭} }});}
}

附加:  MethodChannel  本地访问

在客户端,MethodChannel(API)允许发送与方法调用相对应的消息。 在平台方 面,Android(API)上的MethodChannel和 iOS(API)上的 FlutterMethodChannel启用接收方法调用并发回结果。

 添加相关依赖

import io.flutter.plugin.common.MethodCall;
import io.flutter.plugin.common.MethodChannel;
import io.flutter.plugin.common.MethodChannel.MethodCallHandler;
import io.flutter.plugin.common.MethodChannel.Result;

 申明变量CHANNEL,值与定义触发事件包名相同,以上android_back_desktop为例:

private  final String CHANNEL = "android/back/desktop";

 在MethodChannel的中调用.setMethodCallHandler() 方法,需要一个MethodCallHandler 对象,是一个匿名内部类,有一个方法onMethodCall,在Flutter发送请求事,onMethodCall方法会执行。

public class MainActivity extends FlutterActivity {private static final String CHANNEL = "android_back_desktop";@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);GeneratedPluginRegistrant.registerWith(this);MethodChannel(getFlutterView(), CHANNEL).setMethodCallHandler(MethodCallHandler() {@Overridepublic void onMethodCall(MethodCall methodCall, Result result) {}});}
}

onMethodCall方法中有两个参数 MethodCall 和 result,MethodCall 中有关当前请求的信息,例如调用方法的名字changeLife;Result用于发送信息给Flutter。

在onMethodCall中判断当前请求是否为changeLife,如果是通过result 的 success 返回信息:Life Changed .

public void onMethodCall(MethodCall methodCall, Result result) {if (methodCall.method.equals("backDesktop")){String message ="Life Changed";result.success(message);}...

转载于:https://www.cnblogs.com/john-hwd/p/10791157.html

flutter 返回键监听相关推荐

  1. android删除键监听,「React Native」Android返回键监听

    在需要做监听的js中添加 componentWillMount() { if (Platform.OS === 'android') { BackHandler.addEventListener('h ...

  2. Fragment页面的返回按钮监听

    一.首先启用Fragment的返回事件监听. requireActivity().onBackPressedDispatcher.addCallback(viewLifecycleOwner, obj ...

  3. flutter复制口令返回app监听粘贴板,类似App助力

    @overridevoid didChangeAppLifecycleState(AppLifecycleState state) {switch (state) {case AppLifecycle ...

  4. Android的Menu键监听

    Android的Menu键监听 其实想实现的目的很简单,按下Menu键的时候,在Activity中把一个值设置成true,同时弹出菜单,菜单消失的时候再把这个值设成false.搞来一个多小时,其实很简 ...

  5. Home键监听与电源键

    Home键监听 编写广播接收器 private final BroadcastReceiver homePressReceiver = new BroadcastReceiver() {final S ...

  6. Android Home键、锁屏键监听

    一.代码实现如下 /*** @author 郭翰林* @date 2018/10/31 0031 10:04* 注释: 锁屏按钮和Home键监听*/ public class ScreenBroadc ...

  7. 安卓奇葩问题之:返回按键监听,使Dialog不消失

    本文出处:http://bbs.9ria.com/thread-204406-1-1.html 在做自动更新的时候,弹出Dialog提示,要求是只能点击更新或者取消更新时Dialog才会消失.但是在这 ...

  8. android 电视盒子 遥控器 获取,Android TV开发中所有的遥控器按键监听及注意事项,新增home键监听...

    简单记录下android 盒子开发遥控器的监听 ,希望能帮到新入门的朋友们 不多说,直接贴代码 public class MainActivity extends Activity { private ...

  9. weex-android添加返回按钮监听

    概述 在一些场景中需要在选择内容后回传,例如地址选择.日期选择等. 如果用两个页面来传递信息会使逻辑变得复杂,所以我们在开发过程中选择添加一个蒙层来进行选择操作(我们使用weex-ui的wxc-pop ...

  10. js微信监听返回_JS监听微信、支付宝等移动app及浏览器的返回、后退、上一页按钮的事件方法...

    在实际的应用中,我们常常需要实现在移动app和浏览器中点击返回.后退.上一页等按钮实现自己的关闭页面.调整到指定页面或执行一些其它操作的需求,那在代码中怎样监听当点击微信.支付宝.百度糯米.百度钱包等 ...

最新文章

  1. POJ 3228 二分最大流
  2. java list数据的更新,java – ObservableList不更新ArrayList
  3. SpringMVC 学习笔记(二) @RequestMapping、@PathVariable等注解
  4. 反向传播算法_反向传播算法:定义,概念,可视化
  5. Ajax — 大事件项目(第二天)
  6. python scipy样条插值函数大全(interpolate里interpld函数)
  7. Java EE 6示例– Galleria
  8. GTX1060 6G是低端电脑显卡吗?
  9. 一天搞定DXUT三步曲之二:添加文本
  10. jmeter校验结果_JMeter(1)--请求内容验证
  11. Sketch使用教程(四)
  12. 提升自己的最好方式是什么呢?
  13. 蚁群算法(Ant Colony Optimization)
  14. LPSTR/LPCSTR/LPWSTR/LPCWSTR/LPTSTR/LPCTSTR字符串指针
  15. OO系统分析员之路--用例分析系列(4)--业务建模一般步骤和方法[整理重发]
  16. ROG 幻16无线网卡驱动无法更新
  17. Win10多用户同时远程桌面的另类解决方案---支持1809和1909和2004版本V2.0
  18. 【日志记录】基于AOP实现自定义日志注解,并支持动态设置注解内容
  19. stm32中如何使用PCA9685控制舵机(详解)
  20. 逐梦旅程学习笔记 DirectX开发入门01:应用程序基本框架

热门文章

  1. 电脑键盘上各个按键功能详解
  2. VMware连接不上网
  3. linux编译openssl报错,cargo编译musl报错openssl
  4. 软件附加截图功能(QQ,360浏览器)
  5. 一网打尽!所有PMP的计算公式都在这里啦,赶紧学起来(1)
  6. ubuntu关闭网络防火墙后,外网依然不能连接ubuntu的端口
  7. 安卓6.0+通电自动开机
  8. UE4雷达图(纯蓝图)
  9. python医院排队系统_叫号系统排队系统挂号系统实现(JAVA队列)
  10. AS3动画效果公式,常用处理公式代码,基本运动公式,三角公式