PR

[Flutter]既存のプロジェクトをFlutter 2.0(Null-Safety)に対応する方法

Flutter

はじめに

先日、ついに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 StudioDart Analysisで出ているエラーの対応を行います。

以上で対応終了です!

さいごに

自分のプロジェクトはパッケージのいくつかがNull-Safety対応されていないので、バージョンアップできるのはまだ先になりそうです。

おすすめ参考書

参考リンク

Events.Flutter.dev redirection

Flutter2.0で新しくなったこと
日本時間の3/4の未明に行われたFlutter EngageでFlutter2.0が発表されました。 変更点をまとめていきます。 Web/Wind

コメント

タイトルとURLをコピーしました