这个问题导致我的项目出现了两个bug
问题一,点击底部返回键,正常来说都是返回上一级页面,结果却是无论在哪个页面点击手机底部返回键,app都是直接退到后台,
这个问题不是一开始就这样,应该是期间某一个配置导致的。
问题二,也是和返回键有关,当时使用了一个图片库 :image_pickers: ^2.0.4+8
这个库如果打开相册的时候,不选择任何图片,直接点击返回键,发现无法正常退出,需要点击两次才会退出
点击第一次的时候,出现空白页面,中间显示app的包名,再点击第二次后退键,才可以正常退出
后面研究了好久,才发现有地方配置导致的
AndroidManifest.xml的application,当时应该是某个插件需要加这个配置
android:enableOnBackInvokedCallback="true",这个默认不加是false;
<application
android:label="flutter_test_demo"
android:name="${applicationName}"
android:icon="@mipmap/ic_launcher"
android:enableOnBackInvokedCallback="true"
>
</application>
查资料发现:
这个属性是Android 12(API级别31)更新的,旨在提供一种新的方式来处理用户的返回操作。当设置true为时,它会启用一个新的回调机制,允许应用更灵活地处理返回按钮事件。但如果没有正确处理这个回调,就可能出现一些意料之外的行为
设置为false,则会告诉系统不使用新的回调机制,而是回到传统的返回键处理方式,这通常会触发Activity的onBackPressed()方法。在Flutter应用中,这意味着返回键事件会按预期通过Flutter的导航系统处理,让用户正常地从一个页面返回到另一个页面
问题就在于很多安卓插件都是使用了onBackPressed处理返回键,如果你设置为true,会导致很多插件出现问题
解决方法:去掉android:enableOnBackInvokedCallback="true" ,因为默认就是false
<application
android:label="flutter_test_demo"
android:name="${applicationName}"
android:icon="@mipmap/ic_launcher"
>
</application>