這個(gè)問題導(dǎo)致我的項(xiàng)目出現(xiàn)了兩個(gè)bug
問題一,點(diǎn)擊底部返回鍵,正常來說都是返回上一級(jí)頁面,結(jié)果卻是無論在哪個(gè)頁面點(diǎn)擊手機(jī)底部返回鍵,app都是直接退到后臺(tái),
這個(gè)問題不是一開始就這樣,應(yīng)該是期間某一個(gè)配置導(dǎo)致的。
問題二,也是和返回鍵有關(guān),當(dāng)時(shí)使用了一個(gè)圖片庫 :image_pickers: ^2.0.4+8
這個(gè)庫如果打開相冊(cè)的時(shí)候,不選擇任何圖片,直接點(diǎn)擊返回鍵,發(fā)現(xiàn)無法正常退出,需要點(diǎn)擊兩次才會(huì)退出
點(diǎn)擊第一次的時(shí)候,出現(xiàn)空白頁面,中間顯示app的包名,再點(diǎn)擊第二次后退鍵,才可以正常退出
后面研究了好久,才發(fā)現(xiàn)有地方配置導(dǎo)致的
AndroidManifest.xml的application,當(dāng)時(shí)應(yīng)該是某個(gè)插件需要加這個(gè)配置
android:enableOnBackInvokedCallback="true",這個(gè)默認(rèn)不加是false;
<application
android:label="flutter_test_demo"
android:name="${applicationName}"
android:icon="@mipmap/ic_launcher"
android:enableOnBackInvokedCallback="true"
>
</application>
查資料發(fā)現(xiàn):
這個(gè)屬性是Android 12(API級(jí)別31)更新的,旨在提供一種新的方式來處理用戶的返回操作。當(dāng)設(shè)置true為時(shí),它會(huì)啟用一個(gè)新的回調(diào)機(jī)制,允許應(yīng)用更靈活地處理返回按鈕事件。但如果沒有正確處理這個(gè)回調(diào),就可能出現(xiàn)一些意料之外的行為
設(shè)置為false,則會(huì)告訴系統(tǒng)不使用新的回調(diào)機(jī)制,而是回到傳統(tǒng)的返回鍵處理方式,這通常會(huì)觸發(fā)Activity的onBackPressed()方法。在Flutter應(yīng)用中,這意味著返回鍵事件會(huì)按預(yù)期通過Flutter的導(dǎo)航系統(tǒng)處理,讓用戶正常地從一個(gè)頁面返回到另一個(gè)頁面
問題就在于很多安卓插件都是使用了onBackPressed處理返回鍵,如果你設(shè)置為true,會(huì)導(dǎo)致很多插件出現(xiàn)問題
解決方法:去掉android:enableOnBackInvokedCallback="true" ,因?yàn)槟J(rèn)就是false
<application
android:label="flutter_test_demo"
android:name="${applicationName}"
android:icon="@mipmap/ic_launcher"
>
</application>