GetX状态更新后UI没刷新是怎么回事?

W″兴慧 阅读 33

我用 GetX 写了个购物车页面,点击加减按钮修改商品数量,数据明明变了(打印出来是对的),但界面上的数量没更新。是不是漏了什么?

我的控制器里是这样定义的:RxInt count = 0.obs;,页面里用了 Obx(() => Text('${controller.count}')),按理说应该自动刷新啊?

我来解答 赞 3 收藏
二维码
手机扫码查看
1 条解答
端木清梅
这种情况我之前也碰到过,基本就是字符串模板的问题。

你在 Obx 里面用了 '${controller.count}',这个字符串插值实际上在 Obx 的回调函数外面就执行了,Obx 根本监听不到 count 的变化。

改成这样就行:

Obx(() => Text(controller.count.value.toString()))


或者用 GetX 的语法糖:

Obx(() => Text("${controller.count.value}"))


核心要点就是:必须把响应式变量的 .value 放在 Obx 的回调函数内部,让 Obx 能监听到。

还有一种可能是你的 Obx 范围太小了,比如:

// 错误 - Obx 只包裹了 Text,但 count 变化时整个 Obx 都会重建
Obx(() => Column(
children: [
Text('商品数量:'),
Text('${controller.count}') // 这里还是老问题
],
))


检查一下是不是这两种情况,改一下应该就正常了。
点赞
2026-03-20 09:17