【发布时间】:2020-08-23 19:39:42
【问题描述】:
我试图在图像加载到我的应用程序之前显示微光效果,但我收到一条错误消息:setState() or markNeedsBuild() called during build.
...some code here...
child: Card(
elevation: 5,
child: ListView.builder(
shrinkWrap: true,
scrollDirection: Axis.horizontal,
physics: ScrollPhysics(),
itemCount: widget.images.length,
itemBuilder: (context, index) {
var _image=widget.images[index];
bool showImage=true;
//todo check setState error
NetworkImage(_image).resolve(ImageConfiguration()).addListener(
ImageStreamListener(
(info, call) {
if(mounted) {
setState(() {
showImage = true;
});
}
// do something
},
),
);
return showImage?Container(
width: screenWidth(context)*0.4,
height:screenHeight(context)*0.2,
child: Image.network(
widget.images[index],
width: MediaQuery.of(context).size.width*0.5,
fit: BoxFit.cover,
),
)
:Container(
width: screenWidth(context)*0.4,
height:screenHeight(context)*0.2,
child: Shimmer.fromColors(
...some code here...
在注释掉这段代码后,我意识到这是违规的,但我真的很想保留它以获得微光效果。
NetworkImage(_image).resolve(ImageConfiguration()).addListener(
ImageStreamListener(
(info, call) {
if(mounted) {
setState(() {
showImage = true;
});
}
// do something
},
),
);
我怎样才能绕过它?
【问题讨论】: