Flutter でよく遭遇するエラーと解決方法
実際の開発でよく出るエラーを、解決方法とともにまとめました!
カテゴリ別エラー対処法
1️⃣ ビルドエラー
エラー① Gradle build failed
🔍 原因
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':app:processDebugResources'.
Gradleのキャッシュ破損
Android SDKのバージョン不一致
ビルドファイルの不整合
✅ 解決方法(段階的に試す)
flutter clean
flutter pub get
flutter run
cd android
./gradlew clean
cd ..
flutter clean
flutter pub get
flutter run
# Gradleキャッシュを削除
rm -rf ~/.gradle/caches/
# プロジェクトのビルドフォルダ削除
rm -rf android/.gradle
rm -rf android/app/build
rm -rf build/
# 再ビルド
flutter clean
flutter pub get
flutter run
bash# Android Studioでプロジェクトを開く
open -a "Android Studio" android/
# Android Studio内で:
# File → Invalidate Caches / Restart
エラー② Out of memory error
Expiring Daemon because JVM heap space is exhausted
🔍 原因
Javaヒープメモリ不足
✅ 解決方法(段階的に試す)
android/gradle.properties を編集:
# メモリを増やす
org.gradle.jvmargs=-Xmx4096m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
# 並列ビルドを無効化(メモリ節約)
org.gradle.parallel=false
エラー③ Version conflict
Dependency 'androidx.core:core' requires 'androidx.lifecycle:lifecycle-runtime' version 2.5.0 or higher
🔍 原因
複数のパッケージが異なるバージョンのライブラリを要求
✅ 解決方法(段階的に試す)
android/app/build.gradle.kts に追加:
dependencies {
// 強制的にバージョンを統一
implementation("androidx.lifecycle:lifecycle-runtime:2.6.0")
}
2️⃣ パッケージエラー
エラー④ Pub get failed
Because concert_manager_app depends on http ^2.0.0 which doesn't match any versions, version solving failed.
🔍 原因
指定したバージョンが存在しない
パッケージの依存関係の競合
✅ 解決方法(段階的に試す)
android/app/build.gradle.kts に追加:
# pub.devで正しいバージョンを確認
# https://pub.dev/packages/http
# 間違い
dependencies:
http: ^2.0.0 # このバージョンは存在しない
# 正しい
dependencies:
http: ^1.1.0 # 存在するバージョン
flutter clean
flutter pub get
dependencies {
// 強制的にバージョンを統一
implementation("androidx.lifecycle:lifecycle-runtime:2.6.0")
}
エラー⑤ Package not found
Error: Cannot find package 'image_picker'
🔍 原因
パッケージが正しくインストールされていない
キャッシュの問題
✅ 解決方法(段階的に試す)
android/app/build.gradle.kts に追加:
# キャッシュをクリア
flutter pub cache repair
# パッケージ再取得
flutter clean
flutter pub get
# それでもダメなら削除して再追加
flutter pub remove image_picker
flutter pub add image_picker
3️⃣ Android特有のエラー
エラー⑥ Manifest merger failed
Manifest merger failed : Attribute application@label value=(イベント管理)
from AndroidManifest.xml is also present at [package] AndroidManifest.xml
🔍 原因
パッケージのAndroidManifest.xmlとの競合
✅ 解決方法(段階的に試す)
android/app/src/main/AndroidManifest.xml を修正:
<application
android:label="イベント管理"
tools:replace="android:label"> <!-- この行を追加 -->
マニフェストの最初に追加:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"> <!-- この行を追加 -->
エラー⑦ MinSdkVersion error
Manifest merger failed with multiple errors
uses-sdk:minSdkVersion 16 cannot be smaller than version 21 declared in library
🔍 原因
パッケージが要求するminSdkVersionより低い
✅ 解決方法(段階的に試す)
android/app/build.gradle.kts を修正:
android {
defaultConfig {
minSdk = 21 // 21以上に設定
}
}
エラー⑧ INTERNET permission missing
SocketException: Failed host lookup: 'api.example.com'
🔍 原因
INTERNETパーミッションがない
✅ 解決方法(段階的に試す)
android/app/src/main/AndroidManifest.xml に追加:
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<!-- この行を追加 -->
<uses-permission android:name="android.permission.INTERNET" />
<application>
...
</application>
</manifest>
4️⃣ iOS特有のエラー
エラー⑨ CocoaPods error
[!] CocoaPods could not find compatible versions for pod "Firebase/CoreOnly"
🔍 原因
Podの依存関係の問題
古いPodfileキャッシュ
✅ 解決方法(段階的に)
cd ios
pod install
cd ..
cd ios
rm -rf Pods/
rm Podfile.lock
pod install
cd ..
cd ios
rm -rf Pods/
rm Podfile.lock
pod repo update
pod install
cd ..
sudo gem install cocoapods
cd ios
pod install
cd ..
エラー⑩ Xcode signing error
Signing for "Runner" requires a development team.
🔍 原因
開発チームが設定されていない
✅ 解決方法
Xcodeで設定:
open ios/Runner.xcworkspace
Xcode内で:
- プロジェクトナビゲーターで「Runner」を選択
- 「Signing & Capabilities」タブ
- 「Team」で自分のApple IDを選択
- 「Automatically manage signing」にチェック
エラー⑪ iOS deployment target
エラー⑩ Xcode signing error
The iOS deployment target 'IPHONEOS_DEPLOYMENT_TARGET' is set to 8.0,
but the range of supported deployment target versions is 12.0 to 18.2
🔍 原因
iOS deployment targetが古すぎる
✅ 解決方法
ios/Podfile を編集:
# この行を追加(最初の方)
platform :ios, '12.0'
post_install do |installer|
installer.pods_project.targets.each do |target|
flutter_additional_ios_build_settings(target)
# この部分を追加
target.build_configurations.each do |config|
config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '12.0'
end
end
end
再インストール:
cd ios
pod install
cd ..
5️⃣ 実行時エラー
エラー⑫ Null check operator used on a null value
Null check operator used on a null value
🔍 原因
null の値に ! を使った
✅ 解決方法
悪い例:
String? name;
print(name!.length); // エラー!nameがnull
良い例:
String? name;
// 方法1:if文で確認
if (name != null) {
print(name.length);
}
// 方法2:?? でデフォルト値
print((name ?? 'Unknown').length);
// 方法3:?. で安全にアクセス
print(name?.length);
エラー⑬ setState() called after dispose()
setState() called after dispose()
🔍 原因
Widget が破棄された後に setState() を呼んだ
✅ 解決方法
mounted チェックを追加:
// 悪い例
Future<void> _loadData() async {
final data = await fetchData();
setState(() {
_data = data;
});
}
// 良い例
Future<void> _loadData() async {
final data = await fetchData();
if (mounted) { // この行を追加
setState(() {
_data = data;
});
}
}
エラー⑭ RenderBox was not laid out
RenderBox was not laid out: RenderRepaintBoundary#xxxxx
🔍 原因
Widgetのサイズが決まっていない
✅ 解決方法
Expanded や Flexible を使う:
// 悪い例
Column(
children: [
ListView(...) // エラー!高さが無限
],
)
// 良い例
Column(
children: [
Expanded( // この行を追加
child: ListView(...),
),
],
)
🎯 エラー対処の基本フロー
“flutter” + “エラーメッセージ”
例: “flutter gradle build failed”
まず、エラーメッセージの最初と最後を確認
たいていの場合、誰かが同じエラーに遭遇している
flutter clean
flutter pub get
flutter run
これで80%のエラーは解決!
# 詳細ログを確認
flutter run -v
💡 エラー予防のベストプラクティス
① 定期的にクリーン
# 週に1回
flutter clean
flutter pub get
② パッケージは慎重に更新ーに遭遇している
# 更新前にバックアップ
git commit -am "パッケージ更新前"
# 更新
flutter pub upgrade
# テスト
flutter test
# 問題あれば戻す
git reset --hard HEAD
③ Flutter と Dart を最新に保つ
# Flutter更新
flutter upgrade
# 確認
flutter doctor
④ .gitignore を正しく設定
# Flutter関連
.dart_tool/
.flutter-plugins
.flutter-plugins-dependencies
.packages
.pub-cache/
.pub/
build/
# Android関連
**/android/.gradle/
**/android/captures/
**/android/local.properties
**/android/app/debug
**/android/app/profile
**/android/app/release
# iOS関連
**/ios/**/*.mode1v3
**/ios/**/*.mode2v3
**/ios/**/*.moved-aside
**/ios/**/*.pbxuser
**/ios/**/*.perspectivev3
**/ios/Pods/
🔧 緊急時の最終手段
すべて試してもダメな場合
# ① プロジェクトをバックアップ
cp -r concert_manager_app concert_manager_app_backup
# ② 完全クリーン
rm -rf build/
rm -rf .dart_tool/
rm -rf android/.gradle/
rm -rf android/app/build/
rm -rf ios/Pods/
rm -rf ios/Podfile.lock
# ③ Flutter再インストール
flutter clean
flutter pub get
# ④ Android
cd android
./gradlew clean
cd ..
# ⑤ iOS
cd ios
pod install
cd ..
# ⑥ 再ビルド
flutter run
📚 よくあるエラー早見表
| エラー | 原因 | 解決方法 |
|---|---|---|
| Gradle build failed | キャッシュ破損 | flutter clean |
| Pub get failed | バージョン不一致 | pubspec.yaml確認 |
| CocoaPods error | Pod依存関係 | pod install |
| Null check error | null値を使用 | mounted確認 |
| setState after dispose | Widget破棄後呼出 | if (mounted) |
| INTERNET permission | 権限なし | Manifest追加 |
| MinSdk error | SDKバージョン低い | minSdk上げる |
💡 まとめ
基本の対処法(これだけ覚えておけばOK)
# ① クリーン
flutter clean
flutter pub get
# ② それでもダメなら詳細確認
flutter run -v
# ③ Googleで検索
"flutter" + "エラーメッセージ"
# ④ 最終手段:完全クリーン
# build/, .dart_tool/, Pods/ などを削除
