FlutterでNull Safetyに対応する

  • URLをコピーしました!

こんにちは。

Dart2.12より「Null Safety」をサポートするようになりました。開発中のコードに対応させるために実施したことを残します。

目次

バージョンの確認とバージョンアップ

使用しているDartのバージョンを確認します。

>flutter --version

Flutter 2.0.4 • channel stable • https://github.com/flutter/flutter.git
Framework • revision b1395592de (4 months ago) • 2021-04-01 14:25:01 -0700
Engine • revision 2dce47073a
Tools • Dart 2.12.2

Dartが2.12未満の場合は更新します。(2.12以上ですが更新してます)

>flutter upgrade

Flutter 2.2.3 • channel stable • https://github.com/flutter/flutter.git
Framework • revision f4abaa0735 (5 weeks ago) • 2021-07-01 12:46:11 -0700
Engine • revision 241c87ad80
Tools • Dart 2.13.4

Dart 2.12を適用

pubspec.yamlを編集します。Dart2.7は「Null Safety」未サポートのため、2.12に変更します。

#environment:
#  sdk: ">=2.7.0 <3.0.0"
environment:
  sdk: '>=2.12.0 <3.0.0'

変更すると(多分)色々エラーが出るようになるので、対応していきます。

Null Safety対応方法

ざっくりと、、「?」でNull許容する方法と「required」でNull不可にする方法があります。勿論安全面からは「required」を使用するのが好ましいですが、すべて対応するのが難しい事もあると思うので、必要に応じて使い分けます。

const Scrollbar({Key? key, required Widget child})

FlutterではウィジェットでKeyを常に提供する必要はないため、?を付けて対応する事ができます。上記の場合、Scrollbarを使用する時にchild引数を指定せずにを作成しようとすると、エラーとなるため、呼び出し元も修正する必要があるかもしれません。

引用:https://dart.dev/guides/language/language-tour

使用しているパッケージがNull Safety非対応の場合

自分のコードは修正できますが使用しているパッケージが非対応の場合、実行時に以下エラーとなってしまいます。

Error: Cannot run with sound null safety, because the following dependencies
don't support null safety:

 - package:*******
 - package:*******

For solutions, see https://dart.dev/go/unsound-null-safety

このままだと実行出来ないので、Null Safety非対応のものがあっても実行出来るように「--no-sound-null-safety」オプションを追加します。

>flutter run --no-sound-null-safety

Android Studioを使っている場合は、「構成の編集」から追加します。

Additional run argsに「--no-sound-null-safety」を追加します。

  • URLをコピーしました!

コメント

コメントする

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

目次