近期開發(fā)項(xiàng)目中,測試提了個(gè)bug-----
我們提供的服務(wù)有:成都網(wǎng)站制作、成都做網(wǎng)站、微信公眾號開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、玉屏ssl等。為上千余家企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的玉屏網(wǎng)站制作公司
鬧心
真鬧心……
自己試了幾個(gè)辦法不行,
百度了幾個(gè)辦法
鬧心……
后來去flutter的github看別人提的issue 說是原生的問題(項(xiàng)目是混合開發(fā))
結(jié)果
(就這么個(gè)破玩意搞了我一天,氣啊~……小聲BB)
1、Flutter中的textField要想實(shí)現(xiàn)隨著鍵盤彈出自動升高,必須要在Scaffold中,如下所示
2、如果textfield位置比較下面或者小屏幕時(shí),在鍵盤彈出的時(shí)候?qū)е乱绯鯾ug
這時(shí)候可以嵌套一層SingleChildScrollView(具體嵌套位置可以根據(jù)需要調(diào)整),如下所示
效果如下:
3、點(diǎn)擊空白處收起鍵盤,直接嵌套一層GestureDetector即可,嵌套位置可以在Scaffold的body層,可以自己調(diào)整。
現(xiàn)象:
flutter頁面通過present跳轉(zhuǎn)原生頁面后,原生頁面上的點(diǎn)擊會首先響應(yīng)下面的flutter頁面中的內(nèi)容(比如按鈕什么的)。
這是flutter框架一直存在的一個(gè)bug。在github上有相關(guān)的issue。
原因推測:
推測是flutter對控制器(或者view)加了分類,重寫了控制器的點(diǎn)擊事件,用來計(jì)算是否在對應(yīng)的點(diǎn)擊位置有flutter響應(yīng)事件。沒有的話再扔出去點(diǎn)擊事件。
解決方案1:
在原生控制器中,加入點(diǎn)擊事件的幾個(gè)方法的空實(shí)現(xiàn),用以覆蓋flutter框架中的實(shí)現(xiàn):
-(void)touchesBegan:(NSSetUITouch * *)touches withEvent:(UIEvent *)event{
}
-(void)touchesMoved:(NSSetUITouch * *)touches withEvent:(UIEvent *)event{
}
-(void)touchesCancelled:(NSSetUITouch * *)touches withEvent:(UIEvent *)event{
}
-(void)touchesEnded:(NSSetUITouch * *)touches withEvent:(UIEvent *)event{
}
讓事件不被flutter截獲即可。
解決方案2:
直接切換window的根控制器到原生控制器即可。別忘暫時(shí)保存flutter控制器。
在返回時(shí)再切換回flutter中。
解決方案3:
在flutter跳轉(zhuǎn)到原生頁面之前,在flutter中加上一個(gè)蒙層,用來隔絕手勢往flutter下面的view傳遞。原生頁面返回flutter時(shí)再移除這個(gè)蒙層。