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