Flutter结合GetX实现的下拉框在部分设备上无法正常工作
Flutter GetX下拉框选择后视图不更新问题解决
核心问题分析
你当前的控制器获取方式存在致命问题:
@override ActivitiesController get controller => Get.put(ActivitiesController());
每次访问controller这个getter时,都会调用Get.put()创建新的ActivitiesController实例,导致之前的状态被重置,下拉框选择的状态无法被正确保留和通知视图更新。
解决方案
1. 修正控制器实例获取方式
在State类中初始化控制器,确保整个生命周期内只创建一次实例:
late final ActivitiesController controller; @override void initState() { super.initState(); // 仅在初始化时注入一次控制器 controller = Get.put(ActivitiesController()); }
如果控制器已经在其他地方完成注入,也可以直接用Get.find()获取已存在的实例:
ActivitiesController get controller => Get.find<ActivitiesController>();
2. (可选)简化下拉菜单选项的value赋值
你的statusList元素都是非空字符串,GlobalDropDownContainer中DropdownMenuItem的value判断可以简化,避免不必要的空处理:
items: items.map((String value) { return DropdownMenuItem<String>( value: value, // 直接赋值即可 child: Text( value, style: TextStyle( color: Theme.of(context).colorScheme.onBackground), ), ); }).toList(),
3. 确认状态更新逻辑
你当前的状态更新写法是正确的:
onChange: (value) { controller.selectedStatus(value); }
这等价于controller.selectedStatus.value = value;,两种写法都能正确触发Rx状态更新。
验证修改
完成上述修改后,重新运行项目,下拉框选择选项时,Obx会监听selectedStatus的变化,自动重建GlobalDropDownContainer并更新选中值。
内容的提问来源于stack exchange,提问作者Riadul Islam
相关产品推荐
相关产品推荐

