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

使用dropdown_search添加新选项后弹窗未重建的问题求助

解决DropdownSearch弹窗不更新新增条目的问题

核心原因

你已经用Obx包裹了DropdownSearch,但弹窗打开后属于独立视图层级,初始化时会缓存items的快照,后续brands更新时,弹窗无法自动感知变化,必须关闭重开才能读取最新数据。

可行解决方案

方案1:通过更新Key强制DropdownSearch重建

  1. 在Controller中将dropdownKey改为可响应的全局Key:
final dropdownKey = Rx<GlobalKey<DropdownSearchState>>(GlobalKey());
  1. 在addNewBrand方法中,添加完新品牌后更新Key:
void addNewBrand() {
  // 执行你的品牌添加逻辑,例如获取输入值并加入列表
  final newBrand = // 从表单获取新增品牌内容
  brands.add(newBrand);
  // 更新Key触发DropdownSearch重建
  dropdownKey.value = GlobalKey<DropdownSearchState>();
}
  1. 视图中使用更新后的Key:
key: cAliment.dropdownKey.value,

当Key变化时,Obx会触发DropdownSearch重建,下次打开弹窗时就能加载最新的品牌列表。

方案2:使用asyncItems实时获取数据

将原有的items参数替换为asyncItems,让弹窗每次打开时都主动拉取最新的品牌列表:

// 注释掉原有的items: cAliment.brands.value
asyncItems: (filter) async {
  return cAliment.brands.value;
},

这个方法不需要额外修改状态,弹窗每次打开都会重新获取brands的最新数据,自然能显示新增条目。

方案3:监听列表变化手动刷新弹窗

  1. 在Controller的onInit方法中添加brands的监听:
@override
void onInit() {
  super.onInit();
  brands.listen((_) {
    // 调用DropdownSearch的刷新方法更新弹窗
    dropdownKey.currentState?.updatePopup();
  });
}
  1. 确保dropdownKey是普通的全局Key(无需Rx):
final dropdownKey = GlobalKey<DropdownSearchState>();

当brands列表新增条目时,监听回调会触发updatePopup(),直接刷新已打开的弹窗内容,不需要关闭重开。

注意事项

  • 确认你的cAliment.brands是RxList<String>类型,而非普通List,这样GetX才能监听其变化:
final brands = RxList<String>([]);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 12:03:39