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

Flutter使用GetX框架时计数器更新正常但城市变量无法实时更新问题求解

问题原因
  • 响应式变量更新逻辑错误:更新des、dep时直接重新创建了Rx实例,原有Obx组件监听的是旧的Rx对象,无法触发更新
  • 控制器实例重复创建:首页通过Get.put(Controller())注册了控制器实例,城市选择页再次调用Get.put(Controller())会生成全新的控制器实例,两个页面操作的不是同一个数据源
  • 存在多余调用:使用obs响应式变量+Obx监听的场景下,不需要调用update()方法,该方法仅用于GetBuilder手动更新场景
修正代码

控制器类

import 'package:get/get.dart';

class Controller extends GetxController {
  var count = 0.obs;
  var des = "Delhi".obs;
  var dep = "Agra".obs;
  void increment() {
    count.value++;
  }

  void updateDes(String input) {
    des.value = input;
  }

  void updateDep(String input) {
    dep.value = input;
  }
}

城市选择页面(NewHome)

仅需修改控制器实例获取逻辑,将原有Get.put替换为Get.find获取已经注册的同一份控制器实例:

// 替换原有 final controller = Get.put(Controller());
final controller = Get.find<Controller>();

可选优化(建议修改)

首页Sample的Obx中展示变量时,显式调用.value更符合GetX编码规范,避免部分场景下的解析异常:

Obx(
  () => InkWell(
    child: Text("${my_controller.des.value}"),
    onTap: () {
      Get.to(NewHome(
        num: 1,
      ));
    },
  ),
),
const SizedBox(
  height: 20,
),
Obx(
  () => InkWell(
    child: Text('${my_controller.dep.value}'),
    onTap: () {
      Get.to(NewHome(
        num: 2,
      ));
    },
  ),
),

内容的提问来源于stack exchange,提问作者Shreyansh Sharma

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 05:24:04