flutter项目迁移空安全
遷移
你的代碼里大部分需要更改的代碼,都是可以輕易推導(dǎo)的。例如,如果一個變量可以為空,它的類型需要 ? 后綴。一個不可以為空的命名參數(shù),需要使用 required 標(biāo)記。
針對遷移,你有兩個選項可以選擇:
- 使用遷移工具,它可以幫你處理大多數(shù)可推導(dǎo)的變更。
- 自己動手,豐衣足食。
使用遷移工具
遷移工具會帶上一個非空安全的 package ,將它轉(zhuǎn)換至空安全。你可以先在代碼中添加 提示標(biāo)記
開始轉(zhuǎn)換前,請做好如下的準(zhǔn)備:
- 使用最新的 Dart SDK 穩(wěn)定版本。
- 運(yùn)行 dart pub outdated --mode=null-safety 以確保所有依賴為最新且空安全。
在包含 pubspec.yaml 的目錄下,執(zhí)行 dart migrate 命令,啟動遷移工具。
dart migrate如果你的 package 可以進(jìn)行遷移,工具會輸出類似以下的內(nèi)容:
使用 Chrome 瀏覽器訪問 URL,你可以看到一個交互式的界面,引導(dǎo)你進(jìn)行遷移:
理解遷移的結(jié)果
若要了解每個變化(或者未變化)的原因,點(diǎn)擊 Proposed Edits 窗口中的行數(shù),原因會出現(xiàn)在 Edit Details 窗口中。
點(diǎn)擊 line 3 鏈接,你可以看到遷移工具添加 ! 的原因。而因為你知道 zero 不會為空,所以你可以改進(jìn)遷移結(jié)果。
改進(jìn)遷移的結(jié)果
當(dāng)分析結(jié)果推導(dǎo)了錯誤的可空性時,你可以添加臨時的提示標(biāo)記來改變建議的編輯:
-
在遷移工具的 Edit Details 窗格中,你可以通過 Add /\*?\*/ hint 和 Add /\*!\*/ hint 按鈕來添加提示標(biāo)記。
按下這些按鈕,相應(yīng)的標(biāo)記會立刻添加到代碼中,并且 無法撤銷。如果你想刪除標(biāo)記,可以和平常一樣使用代碼編輯器刪除它。
-
就算遷移工具正在運(yùn)行,你也可以使用編輯器添加提示標(biāo)記。由于你的代碼還未遷移到空安全,所以無法使用空安全的新特性。但是你可以進(jìn)行與空安全無關(guān)的改動,例如重構(gòu)。
當(dāng)你完成編輯后,點(diǎn)擊 Rerun from sources 進(jìn)行更改。
只遷移部分文件
盡管我們希望你能一次性完成遷移工作,但對于大體量的應(yīng)用或 package 而言并不是簡單的事。如果你想只遷移部分文件,請將暫時不遷移的文件前方的綠色勾選框取消勾選。
手動遷移
如果你不想使用遷移工具,你也可以手動進(jìn)行遷移。
我們推薦你 優(yōu)先遷移最下層的庫 —— 指的是沒有導(dǎo)入其他 package 的庫。接著遷移直接依賴了下層庫的依賴庫。最后再遷移依賴項最多的庫。
舉個例子,假設(shè)你的 lib/src/util.dart 導(dǎo)入了其他(空安全)的 package 和核心庫,但它沒有包含任何 import '<本地路徑>' 的引用。那么你應(yīng)當(dāng)優(yōu)先考慮遷移 util.dart,然后遷移依賴了 util.dart 的文件。如果有一些循環(huán)引用的庫(例如 A 引用了 B,B 引用了 C,C 引用了 A),建議同時對它們進(jìn)行遷移。
手動對 package 進(jìn)行遷移時,請參考以下步驟:
編輯 package 的 pubspec.yaml 文件,將最低 SDK 版本設(shè)置到至少為 2.12.0:
environment:sdk: '>=2.12.0 <3.0.0'重新生成 package 的配置文件:
$ dart pub get在版本最低是 2.12.0 的 SDK 上運(yùn)行 dart pub get 時,會將每個 package 的默認(rèn) SDK 最低版本設(shè)定為 2.12,并且默認(rèn)它們已經(jīng)遷移至空安全。
在你的 IDE 上打開package 。
你也許會看到很多錯誤,沒關(guān)系,讓我們繼續(xù)。
利用分析器來辨析靜態(tài)錯誤,逐個遷移 Dart 文件。
按需添加 ?、!、required 以及 late 來消除靜態(tài)錯誤。
分析
更新你的 package(在 IDE 或命令行工具中使用 dart pub get)后在 IDE 或命令行工具中對你的代碼進(jìn)行 靜態(tài)分析:
$ dart pub get $ dart analyze # or `flutter analyze`測試
如果你的代碼通過了分析,接下來可以開始測試:
$ dart test # or `flutter test`你可能需要更新使用了空值作為預(yù)期用例的測試代碼。
如果你需要對代碼作出大量的更改,那么你可能需要重新對代碼進(jìn)行遷移。這時請先回滾代碼更改,再運(yùn)行遷移工具進(jìn)行遷移。
總結(jié)
以上是生活随笔為你收集整理的flutter项目迁移空安全的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: flutter Web打包
- 下一篇: flutter制作具有自定义导航栏的渐进