原因:在flutter中,鍵盤彈起時系統(tǒng)會縮小Scaffold的高度并重建

創(chuàng)新互聯(lián)是一家專注于網(wǎng)站設計制作、成都網(wǎng)站建設與策劃設計,玉泉街道網(wǎng)站建設哪家好?創(chuàng)新互聯(lián)做網(wǎng)站,專注于網(wǎng)站建設十載,網(wǎng)設計領域的專業(yè)建站公司;建站業(yè)務涵蓋:玉泉街道等地區(qū)。玉泉街道做網(wǎng)站價格咨詢:18980820575
1)把Scaffold的resizeToAvoidBottomInset屬性設置為false,這樣在鍵盤彈出時將不會resize
2)把寫死的高度改為 原高度 - MediaQuery.of(context).viewInsets.bottom ,鍵盤彈出時布局將重建,而這個 MediaQuery.of(context).viewInsets.bottom 變量在鍵盤彈出前是0,鍵盤彈起后的就是鍵盤的高度
將輸入框放進可滾動的Widget中即可,當輸入框獲取焦點后,系統(tǒng)會自動將它滑動到可視區(qū)域
Material組件庫中提供了輸入框組件TextField
TextField用于文本輸入,它提供了很多屬性,我們先簡單介紹一下主要屬性的作用,然后通過幾個示例來演示一下關鍵屬性的用法。
prefix和prefixText 以及suffix和suffixText 不能同時存在
獲取輸入內容
通過onChange回調
通過controller監(jiān)聽
_controller .addListener(() {
print(_controller .text);
});
兩種方式相比,onChanged是專門用于監(jiān)聽文本變化,而controller的功能卻多一些,除了能監(jiān)聽文本變化外,它還可以設置默認值、選擇文本
這里我們就用到了focusNode
焦點可以通過FocusNode和FocusScopeNode來控制,默認情況下,焦點由FocusScope來管理,它代表焦點控制范圍,可以在這個范圍內可以通過FocusScopeNode在輸入框之間移動焦點、設置默認焦點等。我們可以通過FocusScope.of(context) 來獲取Widget樹中默認的FocusScopeNode。
Flutter實戰(zhàn)
可以使用 SingleChildScrollView 包裹布局
這里還需要了解一個 Scaffold 中的一個屬性 resizeToAvoidBottomInset
官方文檔給出的解釋就是處理鍵盤遮擋問題,默認是 true,如果不希望頂起需要設置為 false。
在 sdk 低版本的時候是使用 resizeToAvoidBottomPadding 需要將其設置為 false,現(xiàn)在已經棄用。但網(wǎng)上很多文章還沒有改正,仍然用的 resizeToAvoidBottomPadding。
分兩種情況
一種是使用系統(tǒng)的返回鍵,比如 android 底部導航自帶的返回,
另一種是使用導航欄自定義的返回鍵
第一種情況需要在頁面根布局使用 WillPopScope 在 onWillPop 中攔截返回處理。
原理都是通過判斷輸入框是否獲取了焦點
當?shù)撞坑泄潭ǖ慕M件,比如提交按鈕,我們在鍵盤彈起的時候希望按鈕貼著鍵盤頂部固定,但是中間滾動視圖可以自由滾動
可以在 SingleChildScrollView 外部再使用 Stack 包裹,懸浮按鈕使用 Positioned 定位,
還要??注意要給滾動組件底部留出距離防遮擋,同時還有動態(tài)加上 bottomBar 的高度,因為在 iphoneX 以上的手機,會有個虛擬按鍵,如果不加上該按鍵高度,同樣會被遮擋
高度獲取方法: MediaQuery.of(context).padding.bottom
在 showDialog 布局中使用 Scaffold 包裹,不要忘了將 backgroundColor 設為透明。
如果彈窗過高,還是需要將高度固定,然后使用 SingleChildScrollView ,彈窗中同樣也可以在執(zhí)行關閉的時候攔截,判斷鍵盤是否彈起,如果彈起則要先關閉鍵盤。
給所有輸入框綁定 FoucusNode
在 maxLines=1 的情況下,輸入框不支持換行,換行按鈕會變成 done
監(jiān)聽 onEditingComplete 方法
根布局使用 GestureDetector 或者 InkWell 包裹,點擊的時候收起鍵盤。
最后要記得銷毀
新聞名稱:flutter焦點,Flutter焦點效果
URL標題:http://chinadenli.net/article3/dsisdis.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供App開發(fā)、品牌網(wǎng)站建設、移動網(wǎng)站建設、網(wǎng)站收錄、微信公眾號、面包屑導航
聲明:本網(wǎng)站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)