真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

flutter重寫,簡(jiǎn)書 flutter

flutter跳轉(zhuǎn)原生頁(yè)面后的穿透問(wèn)題

現(xiàn)象:

目前創(chuàng)新互聯(lián)已為上千家的企業(yè)提供了網(wǎng)站建設(shè)、域名、雅安服務(wù)器托管、網(wǎng)站托管、服務(wù)器租用、企業(yè)網(wǎng)站設(shè)計(jì)、翁源網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長(zhǎng),共同發(fā)展。

flutter頁(yè)面通過(guò)present跳轉(zhuǎn)原生頁(yè)面后,原生頁(yè)面上的點(diǎn)擊會(huì)首先響應(yīng)下面的flutter頁(yè)面中的內(nèi)容(比如按鈕什么的)。

這是flutter框架一直存在的一個(gè)bug。在github上有相關(guān)的issue。

原因推測(cè):

推測(cè)是flutter對(duì)控制器(或者view)加了分類,重寫了控制器的點(diǎn)擊事件,用來(lái)計(jì)算是否在對(duì)應(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)到原生頁(yè)面之前,在flutter中加上一個(gè)蒙層,用來(lái)隔絕手勢(shì)往flutter下面的view傳遞。原生頁(yè)面返回flutter時(shí)再移除這個(gè)蒙層。

Flutter StatelessWidget和StatefulWidget生命周期

打印結(jié)果為

1、widget的 構(gòu)造方法

2、widget的 createState 方法

3、state的 構(gòu)造方法

4、state的 initState 方法,(重寫該方法時(shí),必須要先調(diào)用 super. initState() )

5、 didChangeDependencies方法 ,分兩種情況:

(5.1)、調(diào)用 initState 方法后,會(huì)調(diào)用該方法,

(5.2)、從其他 widget 中依賴一些 數(shù)據(jù)發(fā)生改變 時(shí),比如用 InheritedWidget , provider 來(lái)監(jiān)聽數(shù)據(jù)的改變)

6、state的 build方法 (當(dāng)調(diào)用 setState 方法,會(huì)重新調(diào)用 build 進(jìn)行渲染)

7、state的 deactivate 方法(當(dāng)state被暫時(shí)從視圖移除的時(shí)候會(huì)調(diào)用,頁(yè)面 push 走、 pop 回來(lái)的時(shí)候都會(huì)調(diào)用。因?yàn)閜ush、pop會(huì)改變widget在視圖樹位置,需要先移除再添加。重寫該方法時(shí),必須要先調(diào)用 super.deactivate() )

8、state的 dispose 方法。頁(yè)面被銷毀的時(shí)候調(diào)用,如: pop 操作。通常情況下,自己的釋放邏輯放在 super.dispose() 之前,先操作子類在操作父類。

flutter Set集合妙用

Set是不能重復(fù)的集合,所以可以用Set去重;

String、int、double類型示例,如下:

String類型:

int類型:

double類型:

可以看到, Set集合可直接對(duì)String、int、double類型去重 ;

Map、List、bool類型和String、int、double類型對(duì)比示例,如下:

可以看到,當(dāng)自定義對(duì)象實(shí)例化為同一個(gè)對(duì)象時(shí),Set會(huì)過(guò)濾掉同一個(gè)實(shí)例化的對(duì)象;當(dāng)自定義對(duì)象實(shí)例化為不同對(duì)象時(shí),Set不會(huì)去重,即使對(duì)象數(shù)據(jù)內(nèi)容一樣,這不符合我們的業(yè)務(wù);

可以看到,重寫自定義對(duì)象==方法,Set還是不能去重;

上面重寫自定義對(duì)象hashCode和==方法,以title不同區(qū)分不同對(duì)象;

可以看到,重寫自定義對(duì)象hashCode和==方法,Set集合對(duì)自定義對(duì)象去重才有效;并且Set集合里有相同對(duì)象時(shí)(相同對(duì)象為上面自定義對(duì)象title值相同的對(duì)象),后面相同的對(duì)象就不會(huì)被加入Set集合里了( 如上面title一樣,boolValue不一樣,這樣被認(rèn)為相同的對(duì)象,因?yàn)橹貙懽远x對(duì)象hashCode和==方法,以title不同區(qū)分不同對(duì)象;Set集合里最開始加入的TestModel('a', boolValue: false),數(shù)據(jù)不會(huì)被相同對(duì)象TestModel('a', boolValue: true)覆蓋 )。

網(wǎng)上介紹flutter Set集合時(shí)一般會(huì)介紹Set沒有順序,這點(diǎn)不太理解,可能是不能通過(guò)索引來(lái)獲取對(duì)應(yīng)的值吧,像Java語(yǔ)言的Set集合確實(shí)是無(wú)序的,但flutter的Set集合保持著子元素的有序性。 如下:

可以看到,將Set通過(guò)toList()方法轉(zhuǎn)為L(zhǎng)ist后,List里子元素的順序和子元素插入Set集合的順序是一致;對(duì)于自定義對(duì)象亦是如此,可自行驗(yàn)證。

為什么Set集合會(huì)保持子元素插入順序呢

我們看下Set源碼,如下:

從源碼我們可知,Set()是一個(gè)工廠構(gòu)造方法,根據(jù)工廠構(gòu)造方法的特點(diǎn),Set是由LinkedHashSet實(shí)例化的。

從上面注釋可知,HashSet是無(wú)序的,LinkedHashSet保持著子元素插入的順序。而Set是由LinkedHashSet實(shí)例化的,所以Set保持著子元素插入的順序。

如想要深入分析LinkedHashSet,LinkedHashSet源碼中有很多external聲明的方法,可參考 如何找到flutter external聲明方法的實(shí)現(xiàn)

demo傳送門


當(dāng)前名稱:flutter重寫,簡(jiǎn)書 flutter
網(wǎng)頁(yè)網(wǎng)址:http://weahome.cn/article/hogiid.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部