在此之前先推薦看大佬的: 填坑指導

創(chuàng)新互聯(lián)主營金口河網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營網(wǎng)站建設(shè)方案,重慶App定制開發(fā),金口河h5小程序開發(fā)搭建,金口河網(wǎng)站營銷推廣歡迎金口河等地區(qū)企業(yè)咨詢
iOS需要注意:
1、flutter2.0要求cocoapods 升級到1.9.0
詳情看這篇博客
2、原來flutter項目中的podfile文件是舊版本的ccocoapods了,刪除podfile和對應(yīng)的.lock,然后flutter項目重新運行使用它自動生成的podfile文件
3、安裝CocoaPods
卸載cocoapods:sudo gem uninstall cocoapods
查看cocoapods版本:pod --version
指定版本安裝:
sudo gem install -n /usr/local/bin cocoapods -v 1.9.3(新MacOS系統(tǒng)升級)
不指定版本安裝
sudo gem install -n /usr/local/bin cocoapods
說明 :老項目sdk1.17.0===升級到2.0.1,當前所有操作基于win平臺
到此為止環(huán)境已經(jīng)準備妥當,正式進入項目修改。
所有的插件都要適配到空安全,插件是否支持均會有對應(yīng)說明Null safety,適配過程不確定版本的話,可以使用dio: any,適配完事后再在pubspec.lock文件中查看具體的版本修改過來,實在有部分插件沒有支持的,參考下面
部分插件在適配空安全的版本放棄維護了,得自行更新或?qū)ふ姨娲纾?flutter_swiper 變?yōu)?flutter_swiper_null_safety ,插件更新后要注意項目中的用法是否需要更新
2.1.1: 以前采用的是 provide 插件共享全局數(shù)據(jù),現(xiàn)在變化為 provider ,用法改變, 點擊參考 ,以防文章丟失,我重復(fù)一遍:
比如:
2.1.2: dio版本升級到4.0.0最新版后,部分用法改變
2.2.1
2.2.2
解決方案:
2.2.3
解決方案:
2.2.4
解決方案:
2.2.5
解決方案:
2.2.6
解決方案:
2.2.7
解決方案:
2.2.8
解決方案: child 換為sliver
2.2.8.1
解決方案: 項目目錄下: android--app-build.gradle --minSdkVersion改為:18 或者19
2.2.8.2
解決方案: 在pubspec.yarm管理里面添加:publish_to
2.2.8.3
解決方案: video_player升級后字段發(fā)生了變化,initialized字段更換為:isInitialized(_controller.value.isInitialized)
2.2.8.4
解決方案:
2.2.8.5
解決方案:
2.2.8.6
解決方案: 方案一:刪除ios目錄下的Podfile.lock 文件然后重新運行 pod install命令
方案二:刪除ios目錄下的Podfile.lock與Podfile文件 重新運行flutter run或flutter build ios
方案三:刪除ios目錄,重新運行 flutter create . 命令,注意有"."這個符號不要忘記
2.2.8.7
這個報錯一般對應(yīng)的就是下面的報錯,注意看后面的報錯信息,看是哪個插件報錯。
解決方案: 把Podfile的版本注釋打開,改為platform :ios, '9.0' 或者是更高的版本
全局替換
1.將new List() 替換為[];
2.TextField的inputFormatters:[WhitelistingTextInputFormatter.digitsOnly] 替換為[FilteringTextInputFormatter.digitsOnly]
3.TextField的inputFormatters:[WhitelistingTextInputFormatter(RegExp("[a-z|A-Z|0-9]"))]替換為FilteringTextInputFormatter.allow(RegExp("[a-z|A-Z|0-9]"))
4.Stack組件中overflow: Overflow.visible改為 clipBehavior: Clip.none;overflow: Overflow.clip改為clipBehavior:Clip.hardEdge
5.ListWheelScrollView組件中clipToSize = false改為clipBehavior: Clip.none,clipToSize = true改為 Clip.hardEdge
6.TextField中maxLengthEnforced: true改為maxLengthEnforcement:MaxLengthEnforcement.enforced
7.FlatButton、RaisedButton、OutlineButton的變化: 官方參考
顏色的屬性發(fā)生了變化,由原來的Color 變?yōu)榱薓aterialStatePropertyColor, 這是未了解決不同狀態(tài)(pressed、hovered、focused、disabled)下按鈕顏色的變化
例如
8.出現(xiàn)如下警告
9.showSnackBar報錯誤
解決方案: Scaffold換為ScaffoldMessenger
10.textSelectionColor棄用
解決方案:
11.charts_flutter升級后屬性報錯
解決方案:
12.flutter 真機調(diào)試無法訪問網(wǎng)絡(luò),dio報錯
解決方案:
android:
ios:
問題12完整參考
Flutter可以算是當下最火熱的新技術(shù)之一,我現(xiàn)在所在團隊也準備將Flutter技術(shù)應(yīng)用到線上工程中。
關(guān)于混合工程,官方文檔其實寫的已經(jīng)比較清楚了,按著文檔走一般問題不大,
但是有一點值得注意的是,F(xiàn)lutter工程引入的庫的gradle的 buildTypes 要與原工程保持一致,如果不一致需要手工添加。
進入正題,現(xiàn)在Flutter官方默認只提供armeabi-v7a、arm64-v8a、x86和x86-64,其中x86和x86-64是為模擬器準備的。目前我們使用的SDK大部分只使用了armeabi架構(gòu),直接使用我們會遇見找不到 libflutter.so,libapp.so 的情況,所以我們需要對FlutterSDK做一定的改造。
首先我們要了解下Flutter編譯產(chǎn)物,因為不同版本產(chǎn)物是不同的,這里我們只針對Flutter 1.9.1-hotfixes來說。除了資源文件之外,F(xiàn)lutter打包會生成兩個非常重要的so庫,他們分別是 libflutter.so,libapp.so 。其中 libflutter.so 是Flutter的SDK產(chǎn)物而 libapp.so 正是我們編寫的dart文件的產(chǎn)物。默認情況下,這兩個文件都會出現(xiàn)在armeabi-v7a中,因此我們要作出對應(yīng)的改造。
libflutter.so 位于FlutterSDK中,這里順帶提一句,除了這對不同CPU架構(gòu),它還分為Debug版和Release版,它們的區(qū)別在于Debug是為JIT編譯方式打造的,體積較大而Release是為AOT編譯方式打造的,體積很小。對 libflutter.so 的改造,只要將其移動文件路徑即可,運行以下腳本即可,此腳本來自美團分享的Flutter文章。
移動完了 libflutter.so 之后我們打包發(fā)現(xiàn), libapp.so 仍然會出現(xiàn)在armeabi-v7a中,所以第二部我們就是移動 libapp.so 。這個需要更改 flutter.gradle ,我們在 flutter.gradle 的45行可以看到如下定義,它定義了我們的環(huán)境。
在524行我們可以看到,abiValue的取值就是根據(jù)上述定義值。
所以結(jié)論很簡單,只要將
private static final String ARCH_ARM32 = "armeabi-v7a";
改為
private static final String ARCH_ARM32 = "armeabi";
就可以完成對與 libflutter.so 的移動。
前期工作我們都做好了,打成aar就非常簡單了
直接使用 flutter build aar --target-platform android-arm
打出來后可以解壓檢查下 libflutter.so,libapp.so 是否都在armeabi文件夾下即可。
說完了armeabi適配問題,這里下說下有關(guān)于有關(guān)于FlutterBoost的接入。這個東西接入有兩點要注意。
在主app內(nèi)加上即可,常規(guī)操作,強制統(tǒng)一support包的版本號
注釋flutter.gradle第655行。因為編譯過程中,會去初始化插件項目的buildType下面的debug配置,而插件項目下并未配置debug,導致報錯。
如果發(fā)現(xiàn)文章中有錯誤或者有更好的解決方案歡迎指正留言,當然如果本篇文章幫助你解決了問題,也不要吝嗇你的感謝。謝謝各位。
在升級flutter1.9+之后,flutter默認的iOS項目為swift,Android的默認項目為kotlin
在創(chuàng)建時選擇語言
基于flutter版本1.9.1,低版本區(qū)別對待。
lib目錄,libflutter.so文件,三個目錄armeabi-v7a,x86_64和x86,支持arm平臺32和x86的32和64。
asset目錄,新增flutter_asset目錄,三個文件,dart產(chǎn)物。
lib目錄,libflutter.so文件,兩個目錄armeabi-v7,arm64-v8a,支持arm平臺32和64。
asset目錄,新增flutter_asset目錄。
在release模式,libapp.so替代flutter老版本的一些dart產(chǎn)物,如下。
flutter命令打包生成產(chǎn)物,flutter命令腳本會調(diào)用dart命令。
dart的編譯模式:
kernel snapshot 模式,開發(fā)階段,isolate_snapshot_data,vm_snapshot_data,kernel_blob_bin是業(yè)務(wù)數(shù)據(jù)。
core jit,
生產(chǎn)階段,dart的一種二進制模式,這是一種aot模式,vm和isolate。
任重而道遠
當前名稱:flutter1.9,flutter 1225
文章分享:http://chinadenli.net/article37/dsisisj.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供ChatGPT、微信公眾號、標簽優(yōu)化、App開發(fā)、網(wǎng)站改版、靜態(tài)網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)