1、點(diǎn)擊輸入flutter框彈出軟鍵盤時(shí),遮擋本輸入框一部分。
網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)公司!專注于網(wǎng)頁設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、小程序定制開發(fā)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了阿榮免費(fèi)建站歡迎大家使用!
2、點(diǎn)擊輸入框,輸入框跟隨軟鍵盤自動(dòng)上移時(shí)其他不該移動(dòng)的內(nèi)容也跟隨上移導(dǎo)致的flutter鍵盤彈出時(shí)listview置底。
webview的版本是webview_flutter: ^0.3.22+1
現(xiàn)在遇到的問題是如果webview中輸入密碼的話,像華為這種會(huì)調(diào)用自己的安全鍵盤,這時(shí)候就會(huì)黑屏,應(yīng)該是內(nèi)部計(jì)算鍵盤高度的問題。這時(shí)候沒辦法了,網(wǎng)頁web端密碼框需要修改一下了自己自定義一下不調(diào)用密碼類型就好,但是無法被輸入框彈上去,后來解決方案是用SingleChildScrollView包裹一下,然后自己監(jiān)聽一下鍵盤的彈窗和隱藏做一下jump的高度就好了
ps: jump的時(shí)候要注意高度,可以在鍵盤出來的時(shí)候底部增加一個(gè)只有高度的view,鍵盤收起隱藏就好了
可以使用 SingleChildScrollView 包裹布局
這里還需要了解一個(gè) Scaffold 中的一個(gè)屬性 resizeToAvoidBottomInset
官方文檔給出的解釋就是處理鍵盤遮擋問題,默認(rèn)是 true,如果不希望頂起需要設(shè)置為 false。
在 sdk 低版本的時(shí)候是使用 resizeToAvoidBottomPadding 需要將其設(shè)置為 false,現(xiàn)在已經(jīng)棄用。但網(wǎng)上很多文章還沒有改正,仍然用的 resizeToAvoidBottomPadding。
分兩種情況
一種是使用系統(tǒng)的返回鍵,比如 android 底部導(dǎo)航自帶的返回,
另一種是使用導(dǎo)航欄自定義的返回鍵
第一種情況需要在頁面根布局使用 WillPopScope 在 onWillPop 中攔截返回處理。
原理都是通過判斷輸入框是否獲取了焦點(diǎn)
當(dāng)?shù)撞坑泄潭ǖ慕M件,比如提交按鈕,我們?cè)阪I盤彈起的時(shí)候希望按鈕貼著鍵盤頂部固定,但是中間滾動(dòng)視圖可以自由滾動(dòng)
可以在 SingleChildScrollView 外部再使用 Stack 包裹,懸浮按鈕使用 Positioned 定位,
還要??注意要給滾動(dòng)組件底部留出距離防遮擋,同時(shí)還有動(dòng)態(tài)加上 bottomBar 的高度,因?yàn)樵?iphoneX 以上的手機(jī),會(huì)有個(gè)虛擬按鍵,如果不加上該按鍵高度,同樣會(huì)被遮擋
高度獲取方法: MediaQuery.of(context).padding.bottom
在 showDialog 布局中使用 Scaffold 包裹,不要忘了將 backgroundColor 設(shè)為透明。
如果彈窗過高,還是需要將高度固定,然后使用 SingleChildScrollView ,彈窗中同樣也可以在執(zhí)行關(guān)閉的時(shí)候攔截,判斷鍵盤是否彈起,如果彈起則要先關(guān)閉鍵盤。
給所有輸入框綁定 FoucusNode
在 maxLines=1 的情況下,輸入框不支持換行,換行按鈕會(huì)變成 done
監(jiān)聽 onEditingComplete 方法
根布局使用 GestureDetector 或者 InkWell 包裹,點(diǎn)擊的時(shí)候收起鍵盤。
最后要記得銷毀