Skip to content

Null Safety エラーの解決方法

問題

Flutter アプリケーションを null safety に移行した後、次のエラーが発生して実行できない場合があります:

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

 - package:cloud_firestore_web
 - package:firebase_core_web
 - package:shared_preferences
 - package:url_launcher_web
 - package:firebase_auth
 - package:http
 - package:provider
...

For solutions, see https://dart.dev/go/unsound-null-safety
Failed to compile application.

この問題は、アプリケーション自体は null safety に対応しているものの、依存しているパッケージの一部がまだ null safety に対応していない場合に発生します。

解決方法

方法1: パッケージの更新(推奨)

まず、使用しているパッケージを最新の null safety 対応バージョンに更新することを検討してください。

yaml
dependencies:
  # 古いバージョン(null safety 非対応)
  # flutter_html: ^0.8.2
  
  # 新しいバージョン(null safety 対応)
  flutter_html: ^3.0.0-alpha.2

パッケージの null safety 対応状況を確認するには:

bash
dart pub outdated --mode=null-safety

方法2: 非サウンド null safety での実行

パッケージの更新がすぐにできない場合、一時的な解決策として非サウンド null safety モードで実行できます。

コマンドラインでの実行

bash
flutter run --no-sound-null-safety

特定のデバイス向けに実行する場合:

bash
flutter run -d chrome --no-sound-null-safety

ビルド時の対応

APK または AAB ファイルをビルドする場合:

bash
flutter build apk --no-sound-null-safety
# または
flutter build appbundle --no-sound-null-safety
# または
flutter build apk --split-per-abi --no-sound-null-safety

IDE での設定

json
{
  "dart.flutterRunAdditionalArgs": [
    "--no-sound-null-safety"
  ],
  "dart.flutterTestAdditionalArgs": [
    "--no-sound-null-safety"
  ]
}
json
{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "Flutter",
      "request": "launch",
      "type": "dart",
      "args": ["--no-sound-null-safety"]
    }
  ]
}

Android Studio/IntelliJ の場合:

  1. Run → Edit Configurations
  2. Additional run args に --no-sound-null-safety を追加

コード内での設定

main.dart ファイルの先頭に次の記述を追加:

dart
// @dart=2.9
import 'package:flutter/material.dart';

void main() {
  runApp(MyApp());
}

WARNING

この方法は一時的な対策です。パッケージが null safety に対応し次第、この設定は削除することを推奨します。

方法3: 環境の確認

開発環境に問題がないか確認します:

bash
flutter doctor --android-licenses
flutter doctor

ベストプラクティス

  1. まずパッケージの更新を試みる - 可能な限り null safety 対応バージョンのパッケージを使用しましょう
  2. 暫定対策として --no-sound-null-safety を使用 - パッケージの更新が難しい場合の一時的な解決策
  3. 定期的にパッケージの状況を確認 - パッケージが null safety に対応したら、設定を元に戻す

参考資料

INFO

null safety は Dart 2.12 で導入された重要な機能です。すべての依存パッケージが対応すれば、より安全でパフォーマンスの良いコードを書くことができます。

以上の方法を試しても問題が解決しない場合は、各パッケージの GitHub リポジトリで null safety 対応の状況を確認することをお勧めします。