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

Flutter使用ValueListenableBuilder时ListView未更新UI问题

点击创建按钮后新StorieCard需更新到UI上

问题原因

ValueNotifier仅会监听其持有的值对象的引用变化,你直接调用storieList.value.add()仅修改了List内部的元素,List本身的内存引用没有发生改变,ValueNotifier无法感知到数据变更,也就不会触发ValueListenableBuilder的重建,因此UI不会同步更新。

修复方案

修改按钮点击事件逻辑,每次新增元素时生成一个新的List赋值给storieList.value,触发引用变化即可正常刷新UI:

createStorieAction() {
    // 基于原有列表生成新列表,追加新元素后重新赋值
    storieList.value = [...storieList.value, StorieCard()];
    print('new Value added to storie list');
}

如果需要直接修改原有列表的元素,可以在修改后手动触发更新通知(不推荐,不符合ValueNotifier的不可变值设计规范):

createStorieAction() {
    storieList.value.add(StorieCard());
    // 手动触发更新通知,需忽略警告
    // ignore: invalid_use_of_protected_member, invalid_use_of_visible_for_testing_member
    storieList.notifyListeners();
    print('new Value added to storie list');
}
优化建议

不推荐直接将Widget组件存储在ValueNotifier中,更合理的实现是存储StorieCard对应的数据模型列表,在ValueListenableBuilder中根据数据动态生成StorieCard组件,可避免Widget缓存、状态错乱等后续问题。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 20:06:07