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
相关产品推荐
相关产品推荐

