Flutter Getx报错:double与RxDouble类型不匹配问题如何解决
问题原因
报错提示
The argument type 'RxDouble' can't be assigned to the parameter type 'double?'核心是两点错误:
- Getx中
RxDouble是对原生double的响应式包装类,不能直接当做double类型传入组件参数- 响应式变量的更新方式错误,不能直接给
RxDouble变量本身赋值
修复方案
1. 修改控制器代码
两种场景对应两种写法:
- 配合
Obx响应式监听使用(无需手动触发刷新)
class CustomWebViewCTRL extends GetxController { RxDouble progress = 0.0.obs; onProgress(pro) { // 修改.value属性完成响应式变量更新 progress.value = (pro / 100); } }
- 配合
GetBuilder使用(需要手动调用update()触发刷新)
class CustomWebViewCTRL extends GetxController { RxDouble progress = 0.0.obs; onProgress(pro) { progress.value = (pro / 100); // 手动通知GetBuilder刷新UI update(); } }
2. 修改UI层调用代码
调用时通过.value获取包装的原生double值即可:
Obx写法(更推荐响应式场景)
Obx(() => LinearProgressIndicator( // 取.value获取原生double值 value: Get.find<CustomWebViewCTRL>().progress.value, color: Colors.black, backgroundColor: Colors.amber, valueColor: const AlwaysStoppedAnimation<Color>(Colors.green), ))
GetBuilder写法
GetBuilder<CustomWebViewCTRL>(builder: (controller) { return LinearProgressIndicator( // 取.value获取原生double值 value: controller.progress.value, color: Colors.black, backgroundColor: Colors.amber, valueColor: const AlwaysStoppedAnimation<Color>(Colors.green), ); })
补充说明
所有Getx的响应式包装类型(RxInt/RxString/RxBool/RxList等)都遵循相同规则:
- 取值需调用
.value获取原生类型值 - 赋值需修改
.value属性,不能直接给响应式变量本身赋值
内容的提问来源于stack exchange,提问作者Abir Ahsan
相关产品推荐
相关产品推荐

