はじめに
先日、ついにFlutterのメジャーアップデートがありました。このアップデートにより様々な機能の追加や変更が入っています。
また、多くの企業でFlutterが採用される事例が増えて、今後もFlutterのニーズが拡大していくのではないかと思っています。
今回は既存のプロジェクトをFlutter 2.0(Null-Safety)に対応する方法を紹介します。
環境
- Flutter 2.0.1
対応方法
Flutterのバージョンアップ
まずはFlutterの更新をします。
$ flutter channel stable
$ flutter upgrade
Flutter is already up to date on channel stable
Flutter 2.0.1 • channel stable • https://github.com/flutter/flutter.git
Framework • revision c5a4b4029c (6 days ago) • 2021-03-04 09:47:48 -0800
Engine • revision 40441def69
Tools • Dart 2.12.0
パッケージがNull-Safety対応されているか確認
プロジェクトが利用しているpub.devのパッケージがNull-Safety対応されているか確認します。
もし対応されていない場合は、パッケージが対応されるまで待つか、そのパッケージを使うのをやめてください。
それができない場合は、バージョンアップは諦めてください。
問題がない場合
% 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.
All your dependencies declare support for null-safety.
問題がある場合
Null-Safety対応がされていない場合は✗マークが付きます。
またチェックマークがあるパッケージはバージョンあげれば対応されているという意味です。
% 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:
app_review ✗2.0.1 - - ✓2.1.0-nullsafety.0
cupertino_icons ✗1.0.0 - - ✓1.0.2
firebase_admob ✗0.10.0+2 - - ✗0.11.0+2
firebase_analytics ✗6.0.2 - - ✓7.1.1
firebase_core ✗0.5.0+1 - - ✓1.0.1
firebase_crashlytics ✗0.2.1+1 - - ✓1.0.0
flutter_keyboard_size ✗0.1.2+2 - - ✗0.1.2+2
flutter_launcher_icons ✗0.8.1 - - ✓0.9.0
intl ✗0.16.1 - - ✓0.17.0
intl_translation ✗0.17.10+1 - - ✗0.17.10+1
provider ✗4.3.2+2 - - ✓5.0.0
share ✗0.6.5+3 - - ✓2.0.1
shared_preferences ✗0.5.12+2 - - ✓2.0.3
No resolution was found. Try running `flutter pub upgrade --null-safety --dry-run` to explore why.
pubspec.yamlのDartのバージョンを変更
既存プロジェクトのDartのバージョンを書き換えます。
environment:
sdk: ">=2.12.0-0 <3.0.0"
Pub Get
いつも通りpub getします。
$ flutter pub get
マイグレーションを実行
マイグレーションを実行して問題があるコードを探し修正します。
% dart migrate
Migrating /Projects/Flutter/flutter_app
See https://dart.dev/go/null-safety-migration for a migration guide.
Analyzing project...
[------------------------------------------------------------------------------------------------------------------------------------\]
2 analysis issues found:
error • The parameter 'key' can't have a value of 'null' because of its type, but the implicit default value is 'null' at lib/main.dart:31:19 • (missing_default_value_for_parameter)
error • The parameter 'title' can't have a value of 'null' because of its type, but the implicit default value is 'null' at lib/main.dart:31:29 • (missing_default_value_for_parameter)
The migration tool didn't start, due to analysis errors.
The following steps might fix your problem:
1. Set the lower SDK constraint (in pubspec.yaml) to a version before 2.12.
2. Run `dart pub get`.
3. Try running `dart migrate` again.
More information: https://dart.dev/go/null-safety-migration
Android StudioのDart Analysisで出ているエラーの対応を行います。
以上で対応終了です!
さいごに
自分のプロジェクトはパッケージのいくつかがNull-Safety対応されていないので、バージョンアップできるのはまだ先になりそうです。
おすすめ参考書
参考リンク
Events.Flutter.dev redirection
Flutter2.0で新しくなったこと
日本時間の3/4の未明に行われたFlutter EngageでFlutter2.0が発表されました。 変更点をまとめていきます。 Web/Wind
コメント