flutter側デバッグの方法

ログから、以下のことが確認できます。

  1. ESP32側:

    • Parameters sent: PARAMS:120,25 が出力されており、正しくパラメータが送信されています。
  2. Flutter側:

    • Notification received: PARAMS:120,25 が出力されており、正しく通知を受信しています。
    • State updated: hourDivision=120, pumpOnPercentage=25 が出力されており、パラメータが更新されています。

しかし、設定画面で hourDivision と pumpOnPercentage が更新されていないようです。この問題は、UIの再描画が正しく行われていないか、設定画面にパラメータが反映されていないことが原因と考えられます。


問題の原因と解決策

1. setState の呼び出し確認

hourDivision と pumpOnPercentage が更新された後に、setState が正しく呼び出されているか確認します。

修正例

characteristic.value.listen((value) {
  String data = String.fromCharCodes(value);
  print("Notification received: $data");

  // PARAMS: で始まるデータを処理
  if (data.startsWith("PARAMS:")) {
    List<String> params = data.substring(7).split(",");
    if (params.length == 2) {
      setState(() {
        hourDivision = int.tryParse(params[0]) ?? 60;
        pumpOnPercentage = int.tryParse(params[1]) ?? 50;
      });
      print("Updated params: hourDivision=$hourDivision, pumpOnPercentage=$pumpOnPercentage");
    }
  }
});


2. 設定画面の更新確認

SettingsScreen で hourDivision と pumpOnPercentage が正しく表示されているか確認します。

デバッグコード例


void didUpdateWidget(SettingsScreen oldWidget) {
  super.didUpdateWidget(oldWidget);
  // パラメータが更新されたらUIを更新
  if (widget.hourDivision != oldWidget.hourDivision) {
    hourDivisionController.text = widget.hourDivision.toString();
    print("hourDivision updated: ${widget.hourDivision}");
  }
  if (widget.pumpOnPercentage != oldWidget.pumpOnPercentage) {
    pumpOnPercentageController.text = widget.pumpOnPercentage.toString();
    print("pumpOnPercentage updated: ${widget.pumpOnPercentage}");
  }
}


3. UIの再描画確認

hourDivision と pumpOnPercentage が更新された後に、UIが再描画されているか確認します。

デバッグコード例

setState(() {
  hourDivision = int.tryParse(params[0]) ?? 60;
  pumpOnPercentage = int.tryParse(params[1]) ?? 50;
  print("State updated: hourDivision=$hourDivision, pumpOnPercentage=$pumpOnPercentage");
});


4. 設定画面の初期化確認

SettingsScreen の initState で hourDivision と pumpOnPercentage が正しく初期化されているか確認します。

デバッグコード例


void initState() {
  super.initState();
  hourDivisionController = TextEditingController(text: widget.hourDivision.toString());
  pumpOnPercentageController = TextEditingController(text: widget.pumpOnPercentage.toString());
  deviceNameController.text = widget.deviceConfig.name;
  print("SettingsScreen initialized: hourDivision=${widget.hourDivision}, pumpOnPercentage=${widget.pumpOnPercentage}, deviceName=${widget.deviceConfig.name}");
}


5. 全体のデバッグフロー

以下のフローでデバッグを行います。

  1. 通知の受信確認:

    • Notification received: PARAMS:120,25 が出力されているか確認します。
  2. パラメータの更新確認:

    • Updated params: hourDivision=120, pumpOnPercentage=25 が出力されているか確認します。
  3. UIの再描画確認:

    • State updated: hourDivision=120, pumpOnPercentage=25 が出力されているか確認します。
  4. 設定画面の更新確認:

    • hourDivision updated: 120 や pumpOnPercentage updated: 25 が出力されているか確認します。

6. デバッグの例

以下は、デバッグログの例です。

ESP32側のログ

Parameters sent: PARAMS:120,25

Flutter側のログ

Notification received: PARAMS:120,25
Updated params: hourDivision=120, pumpOnPercentage=25
State updated: hourDivision=120, pumpOnPercentage=25
hourDivision updated: 120
pumpOnPercentage updated: 25


7. 問題の特定と修正

上記のデバッグフローで問題が特定できたら、該当する部分を修正します。

  • 通知の有効化characteristic.setNotifyValue(true) が正しく呼び出されているか確認します。
タイトルとURLをコピーしました