特定のエラーの対処法

Flutter でよく遭遇するエラーと解決方法
実際の開発でよく出るエラーを、解決方法とともにまとめました!

カテゴリ別エラー対処法

目次

1️⃣ ビルドエラー

エラー① Gradle build failed

🔍 原因

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':app:processDebugResources'.

Gradleのキャッシュ破損
Android SDKのバージョン不一致
ビルドファイルの不整合

✅ 解決方法(段階的に試す)

STEP
レベル1:軽いクリーン
flutter clean
flutter pub get
flutter run
STEP
レベル2:Gradleキャッシュクリア
cd android
./gradlew clean
cd ..
flutter clean
flutter pub get
flutter run
STEP
レベル3:完全クリーン
# Gradleキャッシュを削除
rm -rf ~/.gradle/caches/

# プロジェクトのビルドフォルダ削除
rm -rf android/.gradle
rm -rf android/app/build
rm -rf build/

# 再ビルド
flutter clean
flutter pub get
flutter run
STEP
レベル4:Android Studioで確認
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 に追加:

STEP
ステップ1:バージョンを確認
# pub.devで正しいバージョンを確認
# https://pub.dev/packages/http
STEP
ステップ2:pubspec.yaml を修正
# 間違い
dependencies:
  http: ^2.0.0  # このバージョンは存在しない

# 正しい
dependencies:
  http: ^1.1.0  # 存在するバージョン
STEP
ステップ3:再取得
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キャッシュ

✅ 解決方法(段階的に)

STEP
レベル1:Podを再インストール
cd ios
pod install
cd ..
STEP
レベル2:キャッシュクリア
cd ios
rm -rf Pods/
rm Podfile.lock
pod install
cd ..
STEP
レベル3:Pod repoも更新
cd ios
rm -rf Pods/
rm Podfile.lock
pod repo update
pod install
cd ..
STEP
レベル4:CocoaPods自体を更新
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内で:

  1. プロジェクトナビゲーターで「Runner」を選択
  2. 「Signing & Capabilities」タブ
  3. 「Team」で自分のApple IDを選択
  4. 「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(...),
    ),
  ],
)

🎯 エラー対処の基本フロー

STEP
Google検索

“flutter” + “エラーメッセージ”
例: “flutter gradle build failed”

STEP
エラーメッセージを読む

まず、エラーメッセージの最初と最後を確認

STEP
Stack Overflowを確認

たいていの場合、誰かが同じエラーに遭遇している

STEP
基本のクリーン
flutter clean
flutter pub get
flutter run

これで80%のエラーは解決!

STEP
それでもダメなら詳細調査
# 詳細ログを確認
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 errorPod依存関係pod install
Null check errornull値を使用mounted確認
setState after disposeWidget破棄後呼出if (mounted)
INTERNET permission権限なしManifest追加
MinSdk errorSDKバージョン低いminSdk上げる

💡 まとめ

基本の対処法(これだけ覚えておけばOK)

# ① クリーン
flutter clean
flutter pub get

# ② それでもダメなら詳細確認
flutter run -v

# ③ Googleで検索
"flutter" + "エラーメッセージ"

# ④ 最終手段:完全クリーン
# build/, .dart_tool/, Pods/ などを削除
目次