CachedNetworkImage的Flutter占位符

r1zhe5dt  于 2023-04-22  发布在  Flutter
关注(0)|答案(3)|浏览(177)

我使用cached_network_image包来显示图像,并在加载时有占位符。下面是我的错误和我使用CachedNetworkImage的小部件。

The argument type 'CachedNetworkImage' can't be assigned to the parameter type 'ImageProvider<Object>'
decoration: BoxDecoration(
          borderRadius: BorderRadius.circular(3),
          image: DecorationImage(
            image: CachedNetworkImage(
              imageUrl: "https://cdn....${item.id}/${item.imageName}.jpg",
              imageBuilder: (context, imageProvider) => Container(
                decoration: BoxDecoration(
                  image: DecorationImage(
                    image: imageProvider,
                    fit: BoxFit.cover,
                  ),
                ),
              ),
              placeholder: (context, url) => CircularProgressIndicator(),
              errorWidget: (context, url, error) => Icon(Icons.error),
            ),
            fit: BoxFit.cover,
          ),
        ),

搜索了一下,我在这个Github线程中发现了类似的问题,并给出了一个答案,解释了CachedNetworkImage提供了一个回调函数,我可以使用它来返回图像提供程序。我尝试了这个例子,但仍然有这个错误。
https://github.com/Baseflow/flutter_cached_network_image/issues/177#issuecomment-510359079
我注意到Github线程中的问题有The argument type 'CachedNetworkImage' can't be assigned to the parameter type 'ImageProvider'.错误,而我的是The argument type 'CachedNetworkImage' can't be assigned to the parameter type 'ImageProvider<Object>'.
谁能告诉我,我做错了什么。

kmbjn2e3

kmbjn2e31#

CachedNetworkImage需要在您要渲染的Widget外部 Package
除去

Container(...,
decoration: BoxDecoration(
      borderRadius: BorderRadius.circular(3),
      image: DecorationImage(
        image:

保持

CachedNetworkImage(
          imageUrl: "https://cdn....${item.id}/${item.imageName}.jpg",
          imageBuilder: (context, imageProvider) => Container(
            decoration: BoxDecoration(
              image: DecorationImage(
                image: imageProvider,
                fit: BoxFit.cover,
              ),
            ),
          ),
          placeholder: (context, url) => CircularProgressIndicator(),
          errorWidget: (context, url, error) => Icon(Icons.error),
        ),
        fit: BoxFit.cover,
      ),

由于参数类型“CachedNetworkImage”无法分配给参数image,因此Container中的类型为“ImageProvider”

jvlzgdj9

jvlzgdj92#

不要在装饰图像中使用cached_network_image,而是直接使用它或作为容器的子级,您可以在cached_network_image的图像构建器属性中自定义图像。
原因:cached_network_image不是ImageProvider小部件的类型。

y3bcpkx1

y3bcpkx13#

当您希望将CachedNetworkImageProvider()包含在装饰图像中时,请使用CachedNetworkImageProvider()

装饰图像(
1998年,中国科学院院士李国荣(
Assets.image1,
errorListener:(){
const文本(
'正在加载',
style:TextStyle(
color:AppColors.greyDeepColor,
字体大小:20,
),); },)),

如果您想将其作为独立的widget使用,而不是在装饰图像中使用,则需要使用CachedNetworkImage()。

CachedNetworkImage(
imageUrl:Assets.image2 enter code here
progressIndicatorBuilder:
(context,url,downloadProgress)=〉const Center(
child:文本(
'正在加载',
style:TextStyle(
color:AppColors.greyDeepColor,
字体大小:10,
),),),errorWidget:(context,url,error)=〉const Center(child:图标(图标错误,颜色:AppColors.blueColor,大小:30,),),),

相关问题