这两天遇到很尴尬无语的问题,不知道是我对flutter不够了解还是咋的,修改listview中一个data的数据,setState之后死活不刷新,在网上找了很久,尽然有人也是这样
最佳答案
我遇到了同样的问题。
我已将 key: UniqueKey() 添加到我的 Listview 中
而且效果很好,不需要其他任何东西:)
关于Flutter ListView 在 setState 之后不更新,使用 StatefulWidget 作为项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54897163/
现在还不明白为啥,什么原理,有知道的大神请解答一下
看了关于UniqueKey介绍
class UniqueKey extends LocalKey { UniqueKey(); @override String toString() => '[#${shortHash(this)}]';}
唯一的key,LocalKey的一个实现,其并未重写==和hashCode方法,所有它只和自己相等。注意看UniqueKey的构造函数,并没有像其他的几个key的构造函数一样使用const修饰,这样做的目的是为了进一步保证UniqueKey的唯一性。这样在调用Element的updateChild方法时,此方法内部调用的Widget.canUpdate方法就会始终返回false,从而每次都会创建新的child element。
所以,如果你想让某一个widget每一次都不复用old element,而是去重新创建新的element,那么就给他添加UniqueKey吧。
网友评论