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

