Open15
Flutter v1.22.6 -> v2.1.2にバージョンアップ
この辺を見ながら進める
まずはsdkをfvm経由でインストール
ASの設定でsdkのパス変更
fvm flutter pub outdated --mode=null-safety
fvm flutter pub upgrade --null-safety --dry-run
flutter_statusbarcolorがnull safety非対応だった
に変更する
fvm flutter pub upgrade --nullsafety
pubspec.yamlのsdkとflutterバージョンを変更
- sdk: ">=2.9.0 <3.0.0"
- flutter: ">=1.7.8 <2.0.0"
+ sdk: ">2.12.0 <3.0.0"
+ flutter: ">=1.7.8 <2.9.0"
migrateしてみると大量にエラー出力
dart migrate
error • The argument type 'Null' can't be assigned to the parameter type 'int' at hogehoge.dart:9999:99 • (argument_type_not_assignable)
怪しいかも
新しいmigrateツールのほうが色々改善されているからstableじゃないバージョンを使うほうが良さそう、と理解した
devチャンネルの最新版を利用してみる
fvm install 2.3.0-16.0.pre
fvm use 2.3.0-16.0.pre
migrateを実行してみる。エラーのコメントに従い2つオプションを設定して、最終的に以下のように実行。
fvm dart migrate --skip-import-check --ignore-errors
ライブラリのIF変更周りでExceptionが発生しているのでTODOコメント残して雑に修正し、上記コマンドを再実行
出力されたURLをブラウザで開くと、公式ガイド通りの移行用UIが表示された
ざっと変更点を確認して、applyする
基本はどの型もoptionalにして、徐々に非optional型に移行していければいいと思っていたが、考えを改めた
swiftでいう if let
だったりkotlinでいう .toIntOrNull()
のような便利関数が提供されていないので、optionalの考慮でコードが汚くなっていく
元々nullチェックしていない箇所は実質強制アンラップしているのと同じなので、強制アンラップを基本として移行する
freezedの修正
abstract宣言が不要になった
mokitoの使い方が変わった