実機で画面が白紙になる問題

実機でアプリがインストールされるが、画面が白紙になる場合、以下のような原因が考えられます。それぞれの原因と解決策を確認してください。


1. Flutterの初期化が完了していない

Flutterアプリが正しく初期化されていない場合、画面が白紙になることがあります。特に、main() 関数で runApp() が正しく呼びれていないか、非同期処理がブロックされている可能性があります。

解決策: main() 関数が正しく動作しているか確認します。以下のように、WidgetsFlutterBinding.ensureInitialized() を追加して、Flutterの初期化を確実に行います。

void main() async {
  WidgetsFlutterBinding.ensureInitialized(); // 初期化を確実にする
  runApp(MyApp());
}


2. BLEのパーミッションが不足している

flutter_blue_plus を使用する場合、Bluetooth関連のパーミッションが不足していると、アプリがクラッシュしたり、画面が白紙になることがあります。

解決策:  に以下のパーミッションを追加します。

<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />

また、Android 12以上をターゲットにしている場合は、以下のパーミッションも追加します。

<uses-permission android:name="android.permission.BLUETOOTH_SCAN" />
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />


3. BLEの初期化に失敗している

FlutterBluePlus の初期化に失敗している場合、アプリが正しく動作しないことがあります。

解決策: FlutterBluePlus の初期化を確認し、エラーハンドリングを追加します。例えば、以下のように try-catch でエラーをキャッチします。

void startScan() async {
  try {
    await flutterBlue.startScan(timeout: Duration(seconds: 4));
    flutterBlue.scanResults.listen((results) {
      for (ScanResult result in results) {
        if (result.device.name == "AQUA-FAN-BLE") {
          stopScan();
          connectToDevice(result.device);
          break;
        }
      }
    });
  } catch (e) {
    print("Error starting scan: $e");
    setState(() {
      status = "Scan failed: $e";
    });
  }
}


4. デバイスログを確認する

アプリがクラッシュしている場合、デバイスログに詳細なエラーメッセージが出力されている可能性があります。

解決策: 以下のコマンドでデバイスログを確認します。

adb logcat

特に、flutter や AndroidRuntime に関連するエラーメッセージを探します。エラーメッセージに基づいて問題を特定し、修正します。


5. ホットリロード/ホットリスタートを試す

Flutterのホットリロードやホットリスタートが正しく動作していない場合、画面が白紙になることがあります。

解決策: 以下のコマンドでホットリスタートを試します。

flutter run --hot-restart

または、アプリを完全に再起動します。


6. デバッグモードで実行する

デバッグモードでアプリを実行し、コンソールにエラーメッセージが出力されていないか確認します。

解決策: 以下のコマンドでデバッグモードで実行します。

flutter run

コンソールにエラーメッセージが表示された場合、その内容に基づいて問題を修正します。


7. flutter_blue_plus の互換性を確認する

flutter_blue_plus のバージョンが Flutter や Android/iOS のバージョンと互換性がない場合、問題が発生することがあります。

解決策:  で flutter_blue_plus のバージョンを最新に更新します。

dependencies:
  flutter_blue_plus: ^1.0.0  # 最新バージョンに更新

その後、以下のコマンドでパッケージを更新します。

flutter pub get


8. UIの構築に問題がある

BleClientScreen の build メソッドで、UIが正しく構築されていない可能性があります。

解決策: build メソッドを簡素化し、最低限のUIを表示するようにします。例えば、以下のように Text ウィジェットだけを表示します。


Widget build(BuildContext context) {
  return Scaffold(
    appBar: AppBar(
      title: Text('BLE Client'),
    ),
    body: Center(
      child: Text("Hello, World!"), // 簡素なUIを表示
    ),
  );
}

これで画面が表示される場合、元のコードのUI部分に問題があることがわかります。


9. Flutterのキャッシュをクリアする

Flutterのキャッシュが壊れている場合、予期しない動作が発生することがあります。

解決策: 以下のコマンドでFlutterのキャッシュをクリアします。

flutter clean

その後、再度アプリをビルドします。


10. 実機のデバッグ設定を確認する

実機のデバッグ設定が正しく行われていない場合、アプリが正しく動作しないことがあります。

解決策:

  • Androidの場合、開発者向けオプション で USBデバッグ が有効になっているか確認します。
  • iOSの場合、設定 > プライバシー > ローカルネットワーク でアプリのアクセスが許可されているか確認します。
タイトルとURLをコピーしました