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

Flutter Hook中useState与Dropdown联动失效问题求助

问题原因

你当前的selectedData是通过useState初始化的,初始值仅在组件首次build时根据当时的selectedIndex.value计算一次。后续selectedIndex更新时,useState不会自动重新执行初始化逻辑,所以selectedData始终保持初始值,不会随selectedIndex变化。

解决方法

这里提供两种简洁可靠的方案:

方案一:使用useMemoized监听依赖变化

useMemoized会在指定依赖项变化时重新执行计算逻辑,正好适配这种需要根据其他状态动态推导的场景:

修改selectedData的定义:

final selectedIndex = useState(0);
// 用useMemoized替代useState,依赖selectedIndex.value
final selectedData = useMemoized(() {
  return data.firstWhere((element) => element.id == selectedIndex.value);
}, [selectedIndex.value]);

方案二:直接根据selectedIndex实时查找

如果不需要缓存selectedData,可以在需要使用的地方直接根据当前selectedIndex.value从数据源中获取,省去维护额外状态的麻烦:

修改Text组件的内容:

Text(
  data.firstWhere((e) => e.id == selectedIndex.value).someOtherData,
)

同时可以删除原来的selectedData状态定义。

额外说明

你的变量名selectedIndex其实有点误导,因为Dropdown的value绑定的是Data的id(0、10、20),并非数组索引。建议改成selectedId,代码可读性会更好。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 00:42:19