
Flutter 2 發(fā)布至今已經(jīng)1個(gè)多月了,不知道小伙伴們都升級體驗(yàn)了沒有。官方發(fā)布的Flutter 2 技術(shù)博文中詳細(xì)介紹了Flutter 2 帶來的更新,大體包括:
- 修復(fù)了大量bug
- Flutter web 達(dá)到穩(wěn)定版
- Dart 更新到 2.12,引入空安全(Null Safety)
- iOS 新特性支持
- 大量新組件的加入
- 混合開發(fā)時(shí),啟動(dòng)多個(gè) Flutter 實(shí)例,內(nèi)存占用減少 99% ??
- 部分 Api 改動(dòng),包括方法或參數(shù)的廢棄,參數(shù)增減等
很多三方庫已經(jīng)做了適配升級,后續(xù)的bug修復(fù)都會(huì)在新版本中升級,舊版本的 Flutter 無法使用。如果你的項(xiàng)目中的沒有遇到三方庫的bug,那么可以暫時(shí)保持觀望,但還是應(yīng)該盡快升級,后續(xù)的 Android、iOS 甚至是 Xcode 更新都有可能導(dǎo)致你的 App 不可用。
升級步驟
第一步當(dāng)然是
$ flutter upgrade
但是別急,F(xiàn)lutter 2 要求項(xiàng)目中三方庫適配 Null Safety,否則無法編譯通過,所以首先使用如下命令
$ dart pub outdated --mode=null-safety
檢查你的三方庫是否支持 Null Safety,如下圖所示

如果所有三方庫的新版本都支持了 Null Safety,那么就可以放心升級 Flutter 版本了。剩下的步驟都在 Migrating to null safety 這篇文章中,大家可以自己去看。
以上是理想情況下的升級方法,現(xiàn)實(shí)是一些三方庫維護(hù)速度很慢或者作者干脆棄坑了,而項(xiàng)目又不得不用,另外又有些庫的 bug 困擾了我們很久,然后我們發(fā)現(xiàn)它在 Null Safety 的版本上修復(fù)了,這時(shí)我們只有硬著頭皮上了。下面我們重點(diǎn)討論這種情況。
第一步還是要升級 Flutter,然后把能升級的 package 全部升級了。
第二步把無法升級的 package 源碼 clone 到項(xiàng)目中,記得刪除 .git 目錄。把引用方式改成源碼引用,比如
# azlistview: ^1.1.1
azlistview:
path: ./azlistview
然后將終端命令位置移動(dòng)到 package 目錄中,運(yùn)行
$ dart pub outdated --mode=null-safety
檢查 package 項(xiàng)目的所有依賴都有對應(yīng)的 Null Safety 版本,如果沒有請重復(fù)第二步。升級完后運(yùn)行
$ dart migrate
提示
View the migration suggestions by visiting:
http://127.0.0.1:60278/Users/you/project/mypkg.console-simple?authToken=Xfz0jvpyeMI%3D
瀏覽器打開鏈接,點(diǎn)擊 APPLY MIGRATION。

對于自己創(chuàng)建的 package 或者 plugin,操作相同。
最后,將終端命令移到主項(xiàng)目根路徑,運(yùn)行
$ dart migrate
操作同上一步。
遷移命令執(zhí)行完之后,并不代表完全 OK 了,我們還要把 Dart Analysis 提示的所有 error 全部解決

可以嘗試使用
$ dart fix --apply
修復(fù)所有 Api 改動(dòng)引起的錯(cuò)誤,也可以用 IDE來修改。

整個(gè)過程可能要花很長時(shí)間,過于細(xì)小的修改就不贅述了,祝大家都升級成功!
參考文章
1. Announcing Flutter 2
2. What’s New in Flutter 2
3. Migrating to null safety