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

Flutter Getx报错:double与RxDouble类型不匹配问题如何解决

问题原因

报错提示The argument type 'RxDouble' can't be assigned to the parameter type 'double?'核心是两点错误:

  1. Getx中RxDouble是对原生double的响应式包装类,不能直接当做double类型传入组件参数
  2. 响应式变量的更新方式错误,不能直接给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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 17:15:04