有与此主题相关的答案,但它们提供的是解决方法而不是解释。
为什么在需要ImageProvider的地方不能使用Image?从概念上讲,它们对我来说听起来是一样的。
child: new CircleAvatar(
backgroundImage: NetworkImage("https..."), // works
backgroundImage: Image.asset('images/image.png'), // error
),
尝试直接使用图像时产生的错误是:
错误:无法将参数类型“Image”分配给参数类型“ImageProvider”。
4条答案
按热度按时间wgxvkvu91#
镜像对ImageProvider
图像提供程序将图像提供给Image小部件。;D
图像提供者不一定有图像,但它知道如何获得它。
获取镜像
如果你需要一个
Image
小部件,那么使用以下之一:Image.asset()
Image.network()
Image.file()
Image.memory()
获取ImageProvider
如果您需要
ImageProvider
,请使用以下选项之一:AssetImage()
NetworkImage()
FileImage()
MemoryImage()
将ImageProvider转换为镜像
如果您有一个
ImageProvider
对象,并且您想要一个Image
小部件,那么请执行以下操作:将镜像转换为ImageProvider
如果您有一个
Image
小部件,并且需要它的ImageProvider
,请执行以下操作:vsaztqbk2#
图像是显示图像的小部件。
相反,ImageProvider允许您识别图像,而无需确切知道最终资产的位置。当有人想要读取图像时,资产的位置将在稍后被解决。
ny6fqffe3#
实际上,每个背景和前景装饰只接受ImageProvider,如AssetImage(),NetworkImage(),FileImage(),MemoryImage()...
当你试图构建一个小部件时,它需要Image.asset(),Image.network(),Image.file(),Image.memory()...
0md85ypi4#
在Flutter中,ImageProvider是一个抽象类,表示获取图像的方法。
它充当图像数据源和在屏幕上显示图像的Image小部件之间的桥梁。ImageProvider的目的是将图像加载过程与小部件树分离。
ImageProvider类有各种子类,提供不同的加载方式,例如:
AssetImage:从应用程序的资产中加载图像。
网络图片:从URL加载图像。
FileImage:从设备上的文件加载图像。
内存映像:从内存中的原始字节加载图像。
ResizeImage:修改由另一个ImageProvider加载的图像的大小。
要使用ImageProvider,通常将其作为一个参数传递给Image小部件的image参数。下面是一个使用AssetImage从资源加载图像的示例:
示例: