You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter三元条件未触发组件重建,点击蓝牙控制按钮颜色不更新问题

问题原因

你使用GetBuilder实现控制器与UI的绑定,该模式属于手动状态管理,只有主动调用update()方法时才会触发UI重绘。你之前点击「SINCRONIZAR」按钮可以正常更新样式,是因为对应的scanForDevices方法内部执行了update(),而sendDataToDevice方法中修改isOn变量后没有触发更新,只有热重载会强制刷新页面,所以才会出现点击按钮后颜色不变的问题。

解决方案

修改sendDataToDevice方法,在状态更新完成后调用update()即可,建议先确认蓝牙数据发送成功后再修改本地状态,避免状态和设备实际运行情况不一致,修改后代码参考:

sendDataToDevice(String? dataToSend) async {
    if (dataToSend == null) return;
    dev.log("Send Data: $dataToSend");
    List<int> data = utf8.encode(dataToSend);
    // 先执行蓝牙写入
    await bluetoothCharacteristicTx.write(data, withoutResponse: false);
    // 写入成功后再更新本地状态
    isOn = dataToSend == 'e';
    // 通知GetBuilder刷新UI
    update();
}

可选优化方案

如果你不想手动调用update(),可以将isOn定义为响应式变量:

  • 在PruebaBlue控制器中把bool isOn = false改为RxBool isOn = false.obs
  • UI层用Obx包裹两个按钮的容器组件,直接读取_.isOn.value判断颜色即可实现自动刷新

内容的提问来源于stack exchange,提问作者Luis Zapata

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 08:39:01