升級版本為 flutter 2.2.1
mac多版本flutter共存可以安裝fvm工具
安裝和使用細節(jié)可以查看https://juejin.cn/post/6948266183397212174
windows的話有類似的fvm工具
由于flutter2.0 默認開啟了空安全,所以遷移都是圍繞代碼的空安全開始,pubspec.yaml中修改下dart版本號

空安全參考文檔:
https://juejin.cn/post/6958965184631144478快速上手 Flutter 空安全
遷移升級流程
1.升級pubspec.yaml中使用到的插件,更新至支持空安全版本,本地維護的插件先備份,再升級,待升級完成后,同步本地插件的修改或者查看之前修改內容在最新版本插件是否已修復,對于不再維護的插件,如果是簡單插件再引入本地,進行空安全修改,復雜插件需求替代插件?(待項目運行成功后對備份的插件進行進行同步)
?dart pub outdated --mode=null-safety?//檢查插件空安全支持情況
2.api修改,flutter2.0屬于大版本更新,有些widget的api有所有修改需要進行對應的修改
3.之前自動生成的model文件都要加上空安全,然后重新使用build_runner生成model文件
4.開始遷移控制臺運行?dart migrate命令,順利的話會啟動一個內網服務器可以在上面,或者一堆報錯對應文件進行修改
遷移注意事項:
在聲明或者使用變量時,如果不能保證非空,不要使用!取值,也不要使用非空變量,沒有?的變量即為非空變量,編寫空安全代碼時,要清楚的變量是否非空或者是可空,在使用!強制非空時,先判斷對象是否為null,使用?.調用方法,回調的話使用xx?.call(),使用??賦默認值,使用as轉換響應類型
常見報錯:
?List()?The default 'List' constructor isn't available when null safety is enabled 修改為<int>[] 或者?<int?>[]?
?Stack overflow已廢除替換為clipBehavior
The argument type 'ModalRoute<Object?>?' can't be assigned to the parameter type 'PageRoute<dynamic>'.? 使用as轉換類型?
routeObserver.subscribe(this, ModalRoute.of(context)as PageRoute);