Image 颤振:图像未更新

Image 颤振:图像未更新,image,flutter,dart,Image,Flutter,Dart,我正在做一个关于颤振的学校项目,它有一个卡片列表视图。卡上有一个图像,存储在地图中。 映射是这张map\u imgMap,键是_objectList上的name属性,这是一个动态列表。我将图像传递给另一个名为Loader的类,它是一个有状态的小部件,在图像加载时返回一个带有circularProgress指示符的容器,并在完成后返回图像 ListView.builder( itemCount: _objectList.length, itemBuilder: (context,index){

我正在做一个关于颤振的学校项目,它有一个卡片列表视图。卡上有一个图像,存储在地图中。 映射是这张
map\u imgMap
,键是_objectList上的name属性,这是一个动态列表。我将图像传递给另一个名为Loader的类,它是一个有状态的小部件,在图像加载时返回一个带有circularProgress指示符的容器,并在完成后返回图像

ListView.builder(
 itemCount: _objectList.length,
 itemBuilder: (context,index){
  return Card(
  ...
  Row(
   children<Widget>[
     Container(child: Loader(image: _imgMap[_objectList[index].name]))
    ]
  ...

Loader Class:

class Loader extends StatefulWidget {

  Image image;
  Loader({Key key,this.image}) : super(key : key);

   @override
  _LoaderState createState() => _LoaderState(image);
}

class _LoaderState extends State<Loader> {
  Image _image;
  bool wait=true;
  _LoaderState(this._image);

  void initState(){
    _image.image.resolve(ImageConfiguration()).addListener(
      ImageStreamListener(
            (info, call) {
          setState(() {
            wait = false;
          });
        },
      ),
    );
  }

  @override
  Widget build(BuildContext context) {
    return wait ?CircleAvatar(
      backgroundColor: Colors.transparent,
      radius: 50,
      child: simpleCircleLoading() //this is the circleprogress widget,
    ): Image(image: _image.image);
  }

}
ListView.builder(
itemCount:_objectList.length,
itemBuilder:(上下文,索引){
回程卡(
...
划船(
孩子们[
容器(子:加载器(图像:_imgMap[_objectList[index].name]))
]
...
装载机类别:
类加载器扩展StatefulWidget{
图像;
加载器({Key-Key,this.image}):超级(Key:Key);
@凌驾
_LoaderState createState()=>\u LoaderState(图像);
}
类_LoaderState扩展状态{
图像(u图像),;
bool wait=true;
_装载机状态(此图像);
void initState(){
_image.image.resolve(ImageConfiguration()).addListener(
ImageStreamListener(
(信息,电话){
设置状态(){
等待=错误;
});
},
),
);
}
@凌驾
小部件构建(构建上下文){
返回等待?CircleAvatar(
背景颜色:颜色。透明,
半径:50,
child:simplecrceloading()//这是circleprogress小部件,
):Image(Image:_Image.Image);
}
}
它第一次工作正常,显示了正确的图像。但是在添加了一个搜索功能,允许用户按名称搜索,然后仅使用匹配的图像更新列表后,生成的图像是错误的

void search(String value) {
   if(value.isNotEmpty){
     List<dynamic> result = List<dynamic>();
     _backUp.forEach((obj) { //_backup is the complete list of objects, will not change
       if(obj.name.toLowerCase().contains(value.toLowerCase())) {
         result.add(obj);
       }
     });
     setState(() {
       _objectList = result;
     });
   }else {
     setState(() {
       _objectList = _backUp;
     });
   }
 }
void搜索(字符串值){
if(value.isNotEmpty){
列表结果=列表();
_forEach((obj){//\u backUp是对象的完整列表,不会更改
if(obj.name.toLowerCase().contains(value.toLowerCase())){
结果:添加(obj);
}
});
设置状态(){
_objectList=结果;
});
}否则{
设置状态(){
_objectList=\u备份;
});
}
}
示例:


正如您所看到的,卡上的信息正在更新,但图像没有更新。问题出在加载程序类的某个地方,我想,因为用图像小部件替换listview中的加载程序可以修复错误,但我想显示加载程序。

发现错误,我必须向加载程序类传递一个UniqueKey