Flutter移除ListView元素问题:删除元素后列表未更新
问题解决办法
问题出在ChatNotifier的removeElement方法中——StateNotifier只有在给state赋值全新的对象时,才会触发状态更新通知。你现在的代码是直接在原列表上调用removeWhere(原地修改列表内容),没有生成新的列表实例,Provider根本感知不到状态变化,所以ListView不会跟着更新。
只需要修改ChatNotifier里的removeElement方法,改成生成新列表再赋值:
void removeElement({required String id}) { // 过滤出不需要删除的元素,生成新列表并赋值给state state = state.where((message) => message.id != id).toList(); }
补充说明
你看add方法能正常生效,就是因为用了[...state, chatModel]创建了一个全新的列表,然后赋值给state,触发了StateNotifier的更新机制。同样的,删除操作也要遵循这个逻辑:通过where过滤得到新的元素集合,转成列表后重新赋值给state,这样Consumer就能收到状态变化通知,ListView也就会同步更新了。
内容的提问来源于stack exchange,提问作者Ballazx
相关产品推荐
相关产品推荐

