Null Safety エラーの解決方法
問題
Flutter アプリケーションを null safety に移行した後、次のエラーが発生して実行できない場合があります:
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 対応バージョンに更新することを検討してください。
dependencies:
# 古いバージョン(null safety 非対応)
# flutter_html: ^0.8.2
# 新しいバージョン(null safety 対応)
flutter_html: ^3.0.0-alpha.2
パッケージの null safety 対応状況を確認するには:
dart pub outdated --mode=null-safety
方法2: 非サウンド null safety での実行
パッケージの更新がすぐにできない場合、一時的な解決策として非サウンド null safety モードで実行できます。
コマンドラインでの実行
flutter run --no-sound-null-safety
特定のデバイス向けに実行する場合:
flutter run -d chrome --no-sound-null-safety
ビルド時の対応
APK または AAB ファイルをビルドする場合:
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 での設定
{
"dart.flutterRunAdditionalArgs": [
"--no-sound-null-safety"
],
"dart.flutterTestAdditionalArgs": [
"--no-sound-null-safety"
]
}
{
"version": "0.2.0",
"configurations": [
{
"name": "Flutter",
"request": "launch",
"type": "dart",
"args": ["--no-sound-null-safety"]
}
]
}
Android Studio/IntelliJ の場合:
- Run → Edit Configurations
- Additional run args に
--no-sound-null-safety
を追加
コード内での設定
main.dart
ファイルの先頭に次の記述を追加:
// @dart=2.9
import 'package:flutter/material.dart';
void main() {
runApp(MyApp());
}
WARNING
この方法は一時的な対策です。パッケージが null safety に対応し次第、この設定は削除することを推奨します。
方法3: 環境の確認
開発環境に問題がないか確認します:
flutter doctor --android-licenses
flutter doctor
ベストプラクティス
- まずパッケージの更新を試みる - 可能な限り null safety 対応バージョンのパッケージを使用しましょう
- 暫定対策として
--no-sound-null-safety
を使用 - パッケージの更新が難しい場合の一時的な解決策 - 定期的にパッケージの状況を確認 - パッケージが null safety に対応したら、設定を元に戻す
参考資料
INFO
null safety は Dart 2.12 で導入された重要な機能です。すべての依存パッケージが対応すれば、より安全でパフォーマンスの良いコードを書くことができます。
以上の方法を試しても問題が解決しない場合は、各パッケージの GitHub リポジトリで null safety 対応の状況を確認することをお勧めします。