在flutter开发过程中,发现Android手机在App首页点击物理返回按钮时,App会退出并且再次点开App时会重新启动,这代表了上次的退出直接杀死了App,和我们平常的退到手机桌面不同,所以开发了一个单独插件来处理这种情况。
我们提供的服务有:成都网站建设、成都网站制作、微信公众号开发、网站优化、网站认证、章贡ssl等。为上千家企事业单位解决了网站和推广的问题。提供周到的售前咨询和贴心的售后服务,是有科学管理、有技术的章贡网站制作公司
使用步骤如下:
1、pubspec.yaml文件中引入依赖
2、引用插件
3、使用插件来退出App到桌面,并且保持App后台运行
可根据实际情况在_onWillPop方法中处理相关逻辑,比如连续两次点击物理返回按钮才退出到桌面等。
1.打开 VS Code。
2.打开 查看 命令面板…。
3.输入 “install”,然后选择 扩展: 安装扩展(就是点击选择第一行内容)。
4.在扩展搜索输入框中输入 “flutter”,然后在列表中选择 Flutter 并单击 安装。此过程中会自动安装必需的 Dart 插件。(选择第一行并安装)
5.退出然后重新启动 VS Code。
1.打开 查看 命令面板…。
2.输入 “doctor”,选择 Flutter: Run Flutter Doctor。
3.打开 输出 (OUTPUT) 面板查看是否有错误,确保在不同的输出选项 (Output Options) 的下拉列表中选择了 Flutter。
我们在上篇文章已经用命令行创建了一个 my_app 的flutter项目了,这里我们就可以使用 vscode 打开看看了
创建新项目 ,则是在命令面板输 flutter , 选择 Flutter: New Application Project
运行项目 ,找到 VS Code 的状态栏(窗口底部蓝色的条)
1.打开 Android Studio。
2.打开插件设置(在 v3.6.3.0 以上的系统打开 Configure Plugins)。
这里需要先改一下网络请求的设置
3.然后搜索Flutter 插件,选择并点击 安装。
4.当弹出安装 Dart 插件提示时,点击 Yes。
5.退出重新启动编译器,然后在编译器主页面就可以看到多了了 create new flutter project 可供选择,代表flutter插件安装成功,我们试着点击来创建一个新项目。
在耗时操作的时候,一般都要弹出一个加载框,然后在完成的时候再把加载框关掉,在Flutter中可以直接用showDialog()来弹出一个对话框。
这是一个简单的提示对话框,包含了关闭按钮,点击就能关闭。但一般的耗时操作完成,就需要我们自己把dialog关闭掉。
首先,开启dialog的时机。由于我们需要获取到BuildContext,所以就得等build()方法走完,这里可以用Future.delayed()来等创建好BuildContext再进行创建,或者用Timer来延迟操作,我选择了前者。
其中delayed()在initState()结尾来做就行,这里参考网友封装了一个LoadingDialog。
那么接下来要在什么时机关闭呢?
一开始,我理所当然的以为,是在异步方法结束后,去更新界面的时候关闭,也就是setState(() {})的时候,可是不管怎么尝试,用Navigator.pop()不行,用Navigator.of(context, rootNavigator: true).pop(result)也不行,用FlutterBoost.singleton.close(id)也不行,用FlutterBoost.singleton.closeCurrent()也不行,都会直接把非Dialog的页面也关闭掉,这让我百思不得其解,因为showDialog()的本质也是新建了一个Route出来,也就是最顶层的页面是弹出的Dialog,可是为什么关不掉呢。
一番思前想后,把showDialog的逻辑移到和异步逻辑同级,也就是setState(() {})外面,然后把showDialog()自身创建的BuildContext传进去就能正常关闭了。也就是,在setState(() {})的时候,其实用的context还是非Dialog页面的,所以关闭的当然就不是Dialog了。
持有Dialog自己的BuildContext,然后在异步以后调用就行了。
-此退出方式适用于Flutter是作为Model方式,存在于原生(例如Android)项目里面,并且,当退出时,需要通知原生项目,原生有需要处理的业务,由原生项目来处理结束整个应用(例如Android的:System.exit(0);)
此退出方式就适合原生项目退出时没有需要处理的业务逻辑,直接就结束应用
Flutter documentation 上关乎 exit() 是这么说的:
flutter的命令失效, 提示 zsh: command not found: flutter
解决办法:
1 、执行:【open ~/.zshrc 】
2、如果 提示文件不存在,则执行:【vim ~/.zshrc 】新建一个新文件
3、新建窗口再执行【open ~/.bash_profile 】
4、把 打开的bash_profile 中的内容copy到 上一个窗口新建的zshrc 文件中,保存:
【:wq回车】
5、再使用source命令重新加载一下:【source ~/.zshrc】,下次再编辑这个文件就可以直接执行:【open ~/.zshrc】
6、运行【flutter -h 】看是否生效