1、常用布局的對比

為無極等地區(qū)用戶提供了全套網(wǎng)頁設(shè)計制作服務(wù),及無極網(wǎng)站建設(shè)行業(yè)解決方案。主營業(yè)務(wù)為成都網(wǎng)站設(shè)計、網(wǎng)站制作、無極網(wǎng)站設(shè)計,以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會得到認(rèn)可,從而選擇與我們長期合作。這樣,我們也可以走得更遠(yuǎn)!
使用下來其他組件大致還算方便,但是相對布局而言使用便利程度上Android原生完勝,ConstraintLayout內(nèi)部的所有子View可以設(shè)置互相之間的位置依賴關(guān)系。
而Flutter的Stack組件內(nèi)部的Children只能通過外層包裹 Align后 固定位置,比如 Alignment.topLeft、Alignment.bottomRight 等。遇到復(fù)雜的堆疊布局需要通過外層包裹 Positioned 組件后設(shè)置固定的 top 和 left 距離以達(dá)到效果,內(nèi)部子組件之間無法設(shè)置位置關(guān)聯(lián)關(guān)系。
2、一些常用屬性設(shè)置上的差異:
Margin外邊距
Android:直接在布局文件對View設(shè)置android:layout_marginStart、android:layout_marginTop
Flutter:需嵌套 Container 組件并在內(nèi)部設(shè)置具體的 margin 值
Padding內(nèi)邊距
Android:TextView、ImageView、各種Layout都可以直接在屬性上設(shè)置android:paddingStart
Flutter:需嵌套 Padding 組件并在內(nèi)部設(shè)置具體的值
組件的可見性
Android:每個view都可以通過setVisibility來設(shè)置可見、隱藏或者隱藏但占位
Flutter:沒有單獨(dú)設(shè)置組件是否顯示的api,只能通過 bool 值控制是否添加該組件
事件監(jiān)聽
Android:常規(guī)的setOnClickListener和setOnLongClickListener設(shè)置單擊和長按事件
Flutter:在需要添加事件監(jiān)聽的組件外層嵌套 InkWell 或 GestureDetector 并設(shè)置 onTap 等
3、生命周期
Android:
Activity和Fragment各自有完整的生命周期鏈路onCreate、onStart、onResume、onPause、onDestroy等
Flutter:
萬物皆組件,組件繼承 WidgetsBindingObserver 并重寫 didChangeAppLifecycleState 函數(shù)進(jìn)行監(jiān)聽
退回桌面依次執(zhí)行inactive 》= paused,此時界面不可見用戶不可操作,從桌面重新進(jìn)入app執(zhí)行resumed,狀態(tài)較少如需在某些條件下觸發(fā)特定操作可能要找別的方案,比如發(fā)通知之類的
感謝 知乎日報-API-分析 提供的api幫助完成這個demo
該項目完全開源,單純?yōu)榱藢W(xué)習(xí)與交流,希望大家喜歡,多多提意見。
后續(xù)會將未來學(xué)到的新知識點(diǎn)用到該項目,持續(xù)更新
1.今日熱點(diǎn)
2.主題分類
3.文章詳情
4.抽屜列表增加緩存, 防止多次拉去數(shù)據(jù)
5.評論列表 (界面,動畫優(yōu)化)
6.主題列表 (界面,動畫優(yōu)化)
7.主頁banner自動輪播,手指滑動是禁止輪播,放開則繼續(xù)
8.刷新數(shù)據(jù)失敗,增加重試按鈕
9.分享UI
9.登錄UI,聯(lián)動交互(在評論界面可以點(diǎn)擊寫點(diǎn)評進(jìn)入)
1.Flutter加載Html
1.注冊
2.登錄
3.發(fā)表評論
4.收藏
5.等等
之前開發(fā)了一個純Flutter的項目,結(jié)果接到個新的需求需要使用Flutter單獨(dú)開一個模塊集成到原有的android項目中
下面分享一下如何集成現(xiàn)有的項目和如何繼承以及碰到的問題
1.首先第一步 修改gradle
因?yàn)?Flutter 當(dāng)前僅支持為 x86_64,armeabi-v7a 和 arm64-v8a 構(gòu)建預(yù)編(AOT)的庫 所以我們需要修改gradle的文件限制 APK 中支持的架構(gòu),從而避免 libflutter.so找不到引起的崩潰
2.新建一個FlutterModel的工程
2.使用aar文件 因?yàn)樗泄こ探y(tǒng)一使用jenkins打包所以我們放在本地肯定是不合適的
說以我們需要 打包aar并上傳服務(wù)器
上傳完成后在android中引用
在開發(fā)中遇到的問題
1.關(guān)于android和Ios中的跳轉(zhuǎn)傳參問題
這個問題在android端還是比較方便的 但是的在Ios端并不怎么好實(shí)現(xiàn)
最終決定使用flutter_boost來完成android和Ios與Flutter的通信操作
flutter_boost github地址:
集成文檔:
集成文檔給出了 但是沒有android的 尷尬
下滿分享下android的集成
(1)在flutter的 pubspec.yaml工程中添加
(2)修改android工程
使用本地工程的時候需要在工程共添加
使用aar的時候不需要添加
(3)在android工程中添加對應(yīng)的條狀路由配置
(4)在使用默認(rèn)的flutter_boost啟動界面的時候可能碰到狀態(tài)欄丟失的情況
所以最好集成BoostFlutterActivity寫一個新的activity方便處理狀態(tài)欄和activity進(jìn)出動畫
(5)跳轉(zhuǎn)并傳參
//params 傳多個參數(shù)可以使用json的形式
2.在flutter中的網(wǎng)絡(luò)框架使用的dio結(jié)果在ios的彈出loading的時候出現(xiàn)卡頓現(xiàn)象
解決方式:1.服務(wù)換證書 (但是后臺太忙暫時沒有支持的人員)
2.ios使用原生的loading解決
3.在使用dio的時候出現(xiàn)ios部分手機(jī) 網(wǎng)絡(luò)請求緩慢問題
解決方法:請求的時候使用http 2.0協(xié)議
插件地址:
本文對比的是 UIWebView、WKWebView、flutter_webview_plugin(在iOS中使用的是WKWebView)的加載速度,內(nèi)存使用情況。
測試網(wǎng)頁打開的速度,只需要獲取 WebView 在開始加載網(wǎng)頁和網(wǎng)頁加載完成時的時間戳,時間戳的差即為打開網(wǎng)頁的時間
為了使差異更明顯,我們選擇較為復(fù)雜的 新浪首頁 進(jìn)行加載的對比,為了減小網(wǎng)絡(luò)對加載速度的影響,我們讓手機(jī)連接同一個網(wǎng)絡(luò),分別進(jìn)行 10 次測試然后取平均值,另外,我們需要關(guān)閉 WebView 的緩存,防止緩存對加載速度產(chǎn)生影響
下面使筆者進(jìn)行 10 次測試所得到的數(shù)據(jù)
結(jié)果讓我有點(diǎn)驚訝,一直以為 WKWebView 會是個王者。結(jié)果看,速度上 WKWebView 略慢一點(diǎn),不過總體差異不大(該結(jié)果僅僅是測試新浪的結(jié)果,僅供參考啦)
在這里,筆者又加了一個測試,嘗試記錄從 viewController 的 viewDidLoad 到 webview 的 didFinish 時間,測試了新浪的數(shù)據(jù),如下:
UIWebViewA : 4970、3808、3815、4250、3556 avg(4079.8) (加載完所有頁面)
UIWebViewB : 4103、3124、3070、3256、2835 avg(3277.6)(加載sina完畢)
WKWebView : 3672、3032、2892、2912、2739 avg(3049.4)
flutter_webView : 4532、3901、4310、3496、3378 avg(3923.4)
其中可以看到,webView 有兩行,UIWebViewB 的數(shù)據(jù)就是加載 sina 主站的時間;UIWebViewA 的數(shù)據(jù)是因?yàn)樵诩虞d完 sina 主站之后,新浪又加載了一個 ,所以導(dǎo)致總時間延長,不過即使按照 UIWebViewB 的數(shù)據(jù)來比較,也是 wkWebView 略勝一籌。
此處可以看出 flutter_webView 使用的是 wkwebView,所以它吃虧的主要原因是 flutter 包了一層。
結(jié)論:
速度(didStart - didFinish) UIWebView flutter_webview WKWebView
速度(viewDidLoad - didFinish)WKWebView UIWebView flutter_webview
這里查看內(nèi)存使用的是 xcode 的 debug session 中的 memory。
首先看之前測試時,連續(xù)打開十次新浪的內(nèi)存情況
接著我們在看一下打開淘寶首頁的內(nèi)存情況
從圖上可以看出,WKWebView 在內(nèi)存方面有很大的優(yōu)勢啊,UIWebView 的內(nèi)存是真的傷啊,然后 debug 看了一下 flutter_webView,他使用的就是原生的 webView 。
他相比較原生 WKWebView 的內(nèi)存開銷稍大一點(diǎn),從測試表現(xiàn)來看,一般大個 30 MB 左右。
結(jié)論:內(nèi)存 WKWebView flutter_webview UIWebView
可以在 html5test 中對瀏覽器的兼容性進(jìn)行評分,通過測試發(fā)現(xiàn)得分分別如下
因?yàn)?flutter 里使用的就是 WK,所以和原生的 WKWebView 一樣都是 444 分,比 UIWebView 的 437 略勝一籌
結(jié)論:兼容性 WKWebView = flutter_webview UIWebView
UIWebView : 速度相比較 WKWebView 稍快一點(diǎn),但是內(nèi)存是一大硬傷,所以只要條件允許,就不推薦使用了
WKWebView : 速度略慢一點(diǎn),不過差別不大,總體可以接受。是比UIWebView更好的選擇,推薦使用。
flutter_webView_plugin :在iOS中使用的就是原生的WKWebView,所以總體和 native WKWebView 表現(xiàn)差不多。如果是混編項目中,因?yàn)樗话艘粚樱皂撁婕虞d上存在一定的劣勢,所以混編項目中仍然推薦使用 WKWebView。不過如果從多端考慮、以及項目可遷移等,那么使用也未嘗不可,就是維護(hù)成本要增加一些,需要維護(hù)兩套 webView。這個就需要根據(jù)自己的情況自己取舍了。
透明視頻動畫是目前比較流行的實(shí)現(xiàn)動畫的一種, 大廠也相繼開源自己的框架,最終我們選中 騰訊vap ,它支持了Android、IOS、Web,為我們封裝flutter_vap提供了天然的便利,并且它提供了將幀圖片生成帶alpha通道視頻的工具,這簡直太贊了。
VAP(Video Animation Player)是企鵝電競開發(fā),用于播放酷炫動畫的實(shí)現(xiàn)方案。
video for youtube
video for qiniu
apk download
github
網(wǎng)站欄目:flutter實(shí)戰(zhàn)對比的簡單介紹
當(dāng)前路徑:http://chinadenli.net/article3/dsispos.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供建站公司、網(wǎng)站收錄、品牌網(wǎng)站建設(shè)、Google、域名注冊、面包屑導(dǎo)航
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)