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

