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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 18:40:32