NullSafetyへの移行
参考
流れ
1. Wait for the packages that you depend on to migrate.
2. Migrate your package’s code, preferably using the interactive migration tool.
3. Statically analyze your package’s code.
4. Test to make sure your changes work.
5. If the package is already on pub.dev, publish the null-safe version as a prerelease version.
1. Wait for the packages that you depend on to migrate.
We strongly recommend migrating code in order, with the leaves of the dependency graph being migrated first. For example, if package C depends on package B, which depends on package A, then A should be migrated to null safety first, then B, then C.
依存元から順番に、NullSafety 移行することを強く推奨している。
自分のパッケージ(アプリ)が NullSafety 版ではなくても、依存しているパッケージは NullSafety 版を使うことができるので、先に依存先のパッケージから徐々に NullSafety 化していく。
依存しているパッケージが NullSafety 対応されているか確認
$ flutter pub outdated --mode=null-safety
Showing dependencies that are currently not opted in to null-safety.
[✗] indicates versions without null safety support.
[✓] indicates versions opting in to null safety.
Package Name Current Upgradable Resolvable Latest
direct dependencies: all support null safety.
All dependencies opt in to null-safety.
ダイレクトな依存先は全部NullSafety対応してくれてるっぽい。
もし NullSafety 対応していないパッケージがある場合、以下のように対応されているバージョンとされていないバージョンが列挙されるので、NullSafety対応バージョンにアップグレードする。
以下のコマンドで 、依存パッケージをNullSafety版の最新にアップデートできる。(勝手にPubspec.yamlが書き換わります)
$ dart pub upgrade --null-safety
2. Migrate your package’s code, preferably using the interactive migration tool.
マイグレーション方法は2種類。
- マイグレーションツールを使う
- 手動で移行する
マイグレーションツールは変更のプレビューを確認できることがメリットなので、注釈をつけながら複数人で地道にnull-safety化する場合は使えるかもしれない
ただ、マイグレーションツールはrequiredにしてもいいプロパティを判断してnon-nullにすることはできないので、基本的にnullableに書き換える提案をしてくる。
それを1つずつ確認しながら、判断するくらいなら 手動マイグレーション をやった方が手っ取り早いと思った。
ひろCさんの記事によると、マイグレーションツールを使っても結局ひとつひとつ判断し直す必要が出てくるので、それなら最初から手動でやった方が良さそうとのこと。
一旦触ってみる。
マイグレーションツールを使う
1.$ dart migrate
Migrating /
See https://dart.dev/go/null-safety-migration for a migration guide.
Analyzing project...
[--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|]No analysis issues found.
Generating migration suggestions...
[---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------]
Compiling instrumentation information...
[---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------]
View the migration suggestions by visiting:
http://127.0.0.1:51526/Users/[マイグレーションツールのURL]
Use this interactive web view to review, improve, or apply the results.
When finished with the preview, hit ctrl-c to terminate this process.
If you make edits outside of the web view (in your IDE), use the 'Rerun from
sources' action.
上記のURLにアクセスすると、エディタのような画面が立ち上がり、
- 対象ファイル
- 変更内容
などを確認することが出来る。
変更する場合は、エディタ側で /*?*/
や/*!*/
のアサーションを追加し、右上のリロードボタンを押すと変更が反映される。
手動で移行する
2.- pubspec.yaml の dart SDK を 2.12.0 以上に設定する
environment:
sdk: '>=2.12.0 <3.0.0'
- pub get してアラートを潰していく