Flutter中,解决按下返回键将应用挂起到后台,并不会退出的问题

参考地址:传送门

问题:
由于应用中牵扯到了聊天的功能,由于Flutter默认的返回是直接退出APP的,所以需要我们自己特殊配置一下
注意:Flutter在最新的版本中,java代码已经逐渐由kotlin代码替代,所以下面将会展示两个版本的代码来解决这个问题

旧版本Flutter:

第一步:

首先查找到以下路径

打开这个MainActivity.java
保留第一行包名代码!!!,将下面这些代码复制进去替换掉


import android.os.Bundle;import io.flutter.app.FlutterActivity;
import io.flutter.plugins.GeneratedPluginRegistrant;import android.view.KeyEvent;
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);new MethodChannel(getFlutterView(), CHANNEL).setMethodCallHandler(new MethodChannel.MethodCallHandler() {@Overridepublic void onMethodCall(MethodCall methodCall, MethodChannel.Result result) {if (methodCall.method.equals("backDesktop")) {result.success(true);moveTaskToBack(false);}}});}
}
第二步:

创建个Dart文件,文件名自己取,我这里取名为android_back.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);}
}
第三步:

首先引入进来你之前写的这个dart文件,在main里监听最外层返回键,然后通讯原生,执行 moveTaskToBack(false) 回到手机桌面不退出app

import 'package:flutter/material.dart';
import 'package:shoppingmall/android_back.dart';void main() async {runApp(MyApp());
}class MyApp extends StatelessWidget {@overrideWidget build(BuildContext context) {return Provide<ConfigModel>(builder: (context, child, configModel) {return MaterialApp(title: 'test',debugShowCheckedModeBanner: false,home: WillPopScope(onWillPop: () async {AndroidBackTop.backDeskTop();  //设置为返回不退出appreturn false;  //一定要return false},child: Text("Test"),),);},);}
}

新版本Flutter:

新版本的flutter只是在安卓里的那个文件有所不同,代码已经变为了kotlin的格式,所以,里面的代码我们要写成kotlin的样子

import android.os.Bundleimport io.flutter.app.FlutterActivity
import io.flutter.plugins.GeneratedPluginRegistrantimport android.view.KeyEvent
import io.flutter.plugin.common.MethodCall
import io.flutter.plugin.common.MethodChannelclass MainActivity : FlutterActivity() {//通讯名称,回到手机桌面private val CHANNEL = "android/back/desktop"override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)GeneratedPluginRegistrant.registerWith(this)MethodChannel(flutterView, CHANNEL).setMethodCallHandler { methodCall, result ->if (methodCall.method == "backDesktop") {result.success(true)moveTaskToBack(false)}}}
}

如何结合路由使用??

class _MyAppState extends State<MyApp> {int _currentIndex = 0; // 展示下标List pageList = [HomePage(), MessagePage(), UserPage()];@overrideWidget build(BuildContext context) {return WillPopScope(onWillPop: () async {AndroidBackTop.backDeskTop(); //设置为返回不退出appreturn false; //一定要return false},child: Scaffold(appBar: AppBar(title: Text('头部')),body: pageList[_currentIndex],bottomNavigationBar: BottomNavigationBar(currentIndex: _currentIndex,type: BottomNavigationBarType.fixed, //允许多个菜单onTap: (index) {setState(() {this._currentIndex = index;});},items: [BottomNavigationBarItem(icon: Icon(Icons.home), title: Text('首页')),BottomNavigationBarItem(icon: Icon(Icons.message), title: Text('消息')),BottomNavigationBarItem(icon: Icon(Icons.people), title: Text('用户'))],),),);}
}

额外知识

java代码如何转换成kotlin??? kotlin如何转换成Java????

解决地址


最后只需要运行程序,就可以体验

Flutter中,解决按下返回键将应用挂起到后台,并不会退出的问题相关推荐

  1. 安卓开发中如何获取手机返回键的监听处理

    步骤如下: 一.监测返回键 1.在Activity中重写onBackPressed()方法. @Override public void onBackPressed() {//此处写退向后台的处理 } ...

  2. int 9中断例程-;在屏幕中间依次显示'a'~'z',并可以让人看清。 在显示的过程中,按下Esc键后,改变显示的颜色...

    ;在屏幕中间依次显示'a'~'z',并可以让人看清. ;在显示的过程中,按下Esc键后,改变显示的颜色 assume cs:code stack segment db 128 dup(0) stack ...

  3. Android webView中监听物理返回键一层一层退出

    前言 fragment中加载webview如果不处理返回键 那么当你打开多个H5页面的时候 会一次性回退到根级 有时候我们需要一个缓冲 就是一级一级退出 给人一个良好的体验 该怎么做呢? 废话不多说 ...

  4. Fragment中设置监听返回键的功能

    首先创建一个抽象类BackHandledFragment,该类有一个抽象方法onBackPressed(),所有BackHandledFragment的子类在onBackPressed方法中处理各自对 ...

  5. html5手机常亮,vue开发的webapp中的手机物理返回键,以及屏幕常亮处理

    前言: 最近一直在做App,最近一周就要收尾了,其中有两个功能要加上: 1.用户点击手机的返回键不会退出App,而是会返回上一层; 2.用户在App中需要保持屏幕常亮; 正文: 本来我是想采用unia ...

  6. android中按两次返回键返回桌面或退出程序

    实现的基本原理 当按下BACK键时,会被onKeyDown捕获,判断是BACK键,则执行exit方法. 在exit方法中,会首先判断isExit的值,如果为false的话,则置为true,同时会弹出提 ...

  7. android 点击返回键home键,appium怎么按下系统按键?如按下返回键、home键等等

    ava_client3.0版本以后使用pressKeyCode方法,之前的版本使用sendKeyEvent方法 1. 返回:driver.pressKeyCode(AndroidKeyCode.BAC ...

  8. 解决安卓系统返回键直接退出app

    <script>mui.init({keyEventBind: {backbutton: true //关闭back按键监听}});// //首页返回键处理// //处理逻辑:1秒内,连续 ...

  9. 在Android中实现监听 返回键,主键,菜单键

    一.监听 返回键 onKeyDown方法和onBackPressed方法 onKeyDown: 是当某个按键被按下是触发.所以也有人在点击返回键的时候去执行该方法来做判断.(该方法只是android ...

  10. 在ag-grid表格上实现类似Excel中的按下enter键自动跳转到下一行对应的输入框功能,Angular4开发...

    最近的项目使用ag-grid在Angular中处理表格,收到个需求是要能够同时修改大量的数据,按下Enter键的时候,光标得自动跳到下一行的对应列上. 方法一:用ag-grid自带的 enterMov ...

最新文章

  1. linux svn自动提交,svn 定时自动提交
  2. easyui 获取 combobox select 的值
  3. 将Android实例导入project
  4. restfull加签_SpringBoot RestFull API签名
  5. pythonopencv的配置_python配置与使用OpenCV
  6. 上海通信管理局启动对手机清理软件问题调查
  7. oracle用户权限管理
  8. ASP.NET MVC + ADO.NET EF 项目实战(一):应用程序布局设计
  9. 学习单片机的三个步骤
  10. 服务器集群虚拟机,服务器集群虚拟机
  11. Final发布中间产物
  12. 百度网盘超级会员,年卡低至198元!百度官方直充,会员实时生效!
  13. obs linux编译,教你如何在 Ubuntu 18.04/16.04 中安装 OBS Studio 21.1
  14. 会计英文(中英文对照)
  15. 黑盒测试用例设计方法【转】
  16. codeforces 332b Maximum Absurdity dp
  17. 舞台机械-舞台灯光-上海腾享舞台灯光概述
  18. 【CVPR2020】3D目标检测论文汇总
  19. 我去,神操作!虚拟机Ubuntu18.04居然可以安装NVIDIA + 附带安装源码与命令
  20. 笔记本加装内存条,更换散热风扇(以联想y7000为例)

热门文章

  1. event mpm php,CentOS 7 安装 PHP-FPM 及使用 mod_mpm_event
  2. ArchLinux下安装steam
  3. mac怎么用ntfs硬盘 NTFS移动硬盘怎么在mac上使用
  4. 科学健脑,让IQ更上一层楼
  5. endnote快捷标注参考文献
  6. 快速解决数据库连接失败
  7. HTML5游戏引擎(二)01-egret引擎的安装与hello world
  8. html怎么把图片的图层,PS制作-把图片添加到图层的4种方法
  9. python报错: list object has no attribute shape的解决
  10. 种草平台--持续更新