新聞中心
Flutter中Dio動(dòng)態(tài)設(shè)置Http代理IP和端口
這問題,一開始就有。因?yàn)槊χχ矝]管。后來發(fā)現(xiàn)還是很有需要靈活修改代理ip和端口號(hào)的。所以得處理一波了。
創(chuàng)新互聯(lián)公司基于分布式IDC數(shù)據(jù)中心構(gòu)建的平臺(tái)為眾多戶提供多線BGP機(jī)房 四川大帶寬租用 成都機(jī)柜租用 成都服務(wù)器租用。
因?yàn)楸旧碜鯝ndroid出身,就草船借鑒了下Android里的設(shè)置點(diǎn)個(gè)8下,進(jìn)入開發(fā)者模式的套路??吹竭@,系不系心如明鏡般?哈哈~ 摸著Android過河也是可以的。
解決方案有了:
我們?cè)O(shè)置了20次,點(diǎn)點(diǎn)點(diǎn)吧,減小誤觸幾率。
這個(gè)Http代理填寫IP和端口號(hào)的頁(yè)面,可以新開一個(gè),就是兩個(gè)輸入框,點(diǎn)Submit后,重置Dio實(shí)例,并把代理設(shè)置給HttpClient。
這里需要注意的是,如果你這里重置了client.findProxy,那么一定要重新實(shí)例化Dio實(shí)例,不然不生效。這一點(diǎn)也可以在源碼中得到印證.
^_^,這就搞完了。還挺簡(jiǎn)單的。但是確實(shí)解決了很大的問題,也很靈活。大家自行拿去試試吧。
Keframe 分幀入屏: 處理flutter卡頓,優(yōu)化流暢度
在掘金上瀏覽到 Nayuta 開源的貝殼flutter流暢優(yōu)化組件 Keframe 。在Demo上試用了一番,確有奇效,下面記錄一下筆記心得。
借用一下作者的圖解:
另外 Keframe 還提供了一個(gè)工具類 SizeCacheWidget 用于緩存子節(jié)點(diǎn)中,分幀組件嵌套的實(shí)際 widget 的尺寸信息。對(duì)于列表,在每一個(gè) item 中嵌套 FrameSeparateWidget,并將 ListView 嵌套在 SizeCacheWidget 內(nèi)即可。
Flutter動(dòng)態(tài)化方案調(diào)研
騰訊課堂14M
今日頭條3M
閑魚22M
百度貼吧13M
螞蟻財(cái)富56.8M
百度網(wǎng)盤14M
手機(jī)淘寶15M
貝殼找房8M
由粗粒度小組件動(dòng)態(tài)拼裝出頁(yè)面,Native端已經(jīng)有很多成熟的框架,如天貓的Tangram。
開發(fā)語言:iOS、Android
適用場(chǎng)景:快速迭代的活動(dòng)營(yíng)銷頁(yè)面
優(yōu)點(diǎn):無侵入,更新簡(jiǎn)單
缺點(diǎn):提前預(yù)埋,擴(kuò)展性差,靈活性差
以webview作為容器的app,歷史悠久,最早到2011年。
開發(fā)語言:HTML
適用場(chǎng)景:雙端嚴(yán)格一致的銀行類app,容器類的支付寶小程序等
優(yōu)點(diǎn):動(dòng)態(tài)更新,跨平臺(tái)
缺點(diǎn):性能,加載速度
UI用Xml+JS表達(dá),用Native View渲染。
開發(fā)語言:Xml+JS
適用場(chǎng)景:雙端嚴(yán)格一致的銀行類app,容器類的支付寶小程序等
優(yōu)點(diǎn):native組件,生態(tài)成熟
缺點(diǎn):三方庫(kù)crash,性能缺陷
UI用Dart表達(dá),用Dart engine渲染。
Flutter官方不支持動(dòng)態(tài)化。原因是Flutter在 Release 模式下構(gòu)建的是 AOT 編譯產(chǎn)物,在 Debug 模式下構(gòu)建的是 JIT ,AOT 依賴的 Dart VM 和 JIT 并不一樣, JIT Release 并不支持 iOS 設(shè)備??尚械姆桨甘牵篈OT 需要一個(gè)編譯后的 “Dart VM”。抽離一份 DartVM 獨(dú)立編譯,再以動(dòng)態(tài)庫(kù)的形式引入項(xiàng)目。
開發(fā)語言:Dart
適用場(chǎng)景:iOS、Android、Web、Desktop、Embed
優(yōu)點(diǎn):性能最佳
缺點(diǎn):增大包體積 20MB+
大廠的主流方案。UI用JS表達(dá),用Dart engine渲染。
開發(fā)語言:JS、類JS
適用場(chǎng)景:iOS、Android
優(yōu)點(diǎn):性能最佳
缺點(diǎn):需要掌握J(rèn)S、Dart兩個(gè)語言和框架
大廠的主流方案。UI用Dart表達(dá),用Dart engineX渲染。
開發(fā)語言:Dart
適用場(chǎng)景:iOS、Android
優(yōu)點(diǎn):性能最佳
缺點(diǎn):需要改造Dart engine
1、 美團(tuán)外賣Flutter動(dòng)態(tài)化實(shí)踐
2、 攜程App 首頁(yè)動(dòng)態(tài)化探索
3、 Flutter 動(dòng)態(tài)化在最右 App 中的實(shí)踐
4、 Flutter 動(dòng)態(tài)化熱更新的思考與實(shí)踐
5、 NOW直播Flutter動(dòng)態(tài)搜索列表頁(yè)實(shí)現(xiàn)
6、 Flutter動(dòng)態(tài)化的方案對(duì)比及最佳實(shí)現(xiàn)-閑魚
7、 基于JavaScript 的MXFlutter
基于Weex的Flutter項(xiàng)目框架
最近在做的一個(gè)項(xiàng)目,項(xiàng)目的前期采用Weex開發(fā)。但是隨著交互復(fù)雜度的增加,Weex一處開發(fā)多處多處運(yùn)行的特征并沒有很好的體現(xiàn),相反很多時(shí)候我們還是需要做IOS和Android的適配。如今火熱的Flutter相比Weex和Rn來說,給出了更好的跨平臺(tái)解決方案。所以我們?cè)O(shè)計(jì)了一套基于Weex實(shí)現(xiàn),底層跑在Flutter Engine上的框架。
底層的Runtime采用isolate engine,框架業(yè)務(wù)邏輯,Dom的解析邏輯和Render邏輯都跑在這里。
渲染引擎采用Flutter的Skia,徹底剝離了Android和IOS的差異性.
將Weex VirsualDom的解析都替換成Flutter Widget.
設(shè)計(jì)基于Weex2Dart的Brider,使JS和Dart可以相互調(diào)用
weex-demo的性能展示
release環(huán)境下采用AOT模式,性能會(huì)有質(zhì)的飛躍。
Android-Release版本只有10m大小
相比Weex和Rn具有更好的性能,同時(shí)具有更好的跨平臺(tái)性
相比Flutter,具有動(dòng)態(tài)部署的能力(Flutter Release采用AoT模式并沒有動(dòng)態(tài)部署的能力,即使Debug版本也只是開發(fā)環(huán)境下才有動(dòng)態(tài)化能力并沒有可以實(shí)施項(xiàng)目的能力)
只需要會(huì)Weex開發(fā)或則Rn開發(fā)就可以,不需要額外學(xué)習(xí)Dart,已有的Weex項(xiàng)目可以無縫切換。
Flutter工程化之iOS混編集成
在flutter官網(wǎng)上推薦了iOS項(xiàng)目中兩種混編方式:
筆者在采用兩種集成方式的過程中,因?yàn)閕OS項(xiàng)目結(jié)構(gòu)設(shè)計(jì)導(dǎo)致這兩種簡(jiǎn)單的集成方式都有些麻煩,所以在實(shí)踐中更改和優(yōu)化了集成方式,使之在筆者的項(xiàng)目中能夠更加簡(jiǎn)單和快速的集成。
問題:在不更改flutter tool中相關(guān)腳本的前提下,添加的Script Phase中的腳本相對(duì)路徑錯(cuò)誤,如果只是開發(fā),手動(dòng)更改下路徑就可以了,但是在考慮到CI中不能每次在pod install之后都去更改,所以在開發(fā)調(diào)試中采用該集成方式,結(jié)合flutter attach的方式去調(diào)試。
通過編譯相關(guān)的 xcframework + Cocoapods私有庫(kù)的集成方式在CI中集成,這樣QA的CI不需要配置flutter的相關(guān)依賴
根據(jù)flutter編譯工具的提示: 上面的編譯命令是打包flutter工程項(xiàng)目和插件的產(chǎn)物,在實(shí)際開發(fā)過程中可以發(fā)現(xiàn)是否引入了依賴Native的插件會(huì)導(dǎo)致貶義編譯產(chǎn)物的不同。
根據(jù)上面的對(duì)比:
第一部分:基礎(chǔ)的 Flutter Engine + Flutter App 編譯后的產(chǎn)物 Flutter.xcframwork -- Flutter引擎的包 App.xcframework -- 工程項(xiàng)目對(duì)應(yīng)的AOT的編譯產(chǎn)物 第二部分:三方插件的注冊(cè)中心 FlutterPluginRegistrant.xcframework -- 第三方插件的注冊(cè)中心,其實(shí)是Native + iOS通信的集合 第三部分:依賴iOS Native的原生 FMDB . xcframwork path_provider_ios.xcframework sqflite.xcframework -- cached_network_image依賴的原生實(shí)現(xiàn)
根據(jù)上面的編譯產(chǎn)物可以知道Flutter和App是編譯后必有的包,后面的兩個(gè)部分完全是服務(wù)于三方插件的,到這可以解答第二個(gè)問題:筆者App的混編過程中混編插件失效是因?yàn)楣P者在NativeApp中重寫了Flutter的容器,使用了FlutterEngineGroup動(dòng)態(tài)創(chuàng)建多引擎去對(duì)應(yīng)進(jìn)入不同的功能模塊,混合插件是因?yàn)橹貙戇^程中沒有通過GeneratedPluginRegistrant注冊(cè)插件,所以需要在Native的Flutter容器中注冊(cè)插件,使之生效。
在這為什么使用commit的hash作為flutter-libs的依賴,因?yàn)閜od install的時(shí)候會(huì)有緩存,除了版本好,commit hash也能保證每次CI編譯通過 pod install 來更新flutter-libs依賴產(chǎn)物
完成?。?!
當(dāng)前名稱:貝殼flutter動(dòng)態(tài)化,Flutter動(dòng)態(tài)化
文章地址:http://fisionsoft.com.cn/article/phpspi.html