ClipOval(child:Image.network("http://197.13.15.233:8787/api/v1/user/$id/picture", 适合:BoxFit.cover, 宽度:40, 身高:40, 键:ValueKey(new Random().nextInt(100)), 标题:{ "authorization": "不记名$token", // 如果需要其他标头 }, loadBuilder:(BuildContext 上下文、Widget 子项、ImageChunkEvent 加载进度) {
if (loadingProgress == null) return child;
return ClipOval(
child: Container(
width: 40,
height: 40,
child: Center(
child: CircularProgressIndicator(
value: loadingProgress.expectedTotalBytes != null ?
loadingProgress.cumulativeBytesLoaded / loadingProgress.expectedTotalBytes
: null,
),
),
),
);
},
errorBuilder: (BuildContext context, Object exception, StackTrace stackTrace) {
return SvgPicture.asset(
"Assets/Images/avatar.svg",
width: 40,
height: 40,
fit: BoxFit.cover,
);
},
),
)
每次调用
setState
时,相关的 StatefulWidget
都会重建。因此,再次从网络中获取网络图像。
为了避免这种情况,您可以使用CachedNetworkImage。它会缓存您的网络图像,不再闪烁。
如果您遇到
CacheNetworkImage
闪烁问题。您可以通过增加缓存大小来尝试解决方法。
PaintingBinding.instance.imageCache.maximumSizeBytes = 1000 << 20;
https://github.com/Baseflow/flutter_cached_network_image/issues/325#issuecomment-869041042