Flutter中的“Image”和“ImageProvider”有什么区别?

axzmvihb  于 2023-06-07  发布在  Flutter
关注(0)|答案(4)|浏览(404)

有与此主题相关的答案,但它们提供的是解决方法而不是解释。
为什么在需要ImageProvider的地方不能使用Image?从概念上讲,它们对我来说听起来是一样的。

child: new CircleAvatar(
  backgroundImage: NetworkImage("https..."),        // works
  backgroundImage: Image.asset('images/image.png'), // error
),

尝试直接使用图像时产生的错误是:
错误:无法将参数类型“Image”分配给参数类型“ImageProvider”。

wgxvkvu9

wgxvkvu91#

镜像对ImageProvider

图像提供程序将图像提供给Image小部件。;D
图像提供者不一定有图像,但它知道如何获得它。

获取镜像

如果你需要一个Image小部件,那么使用以下之一:

  • Image.asset()
  • Image.network()
  • Image.file()
  • Image.memory()

获取ImageProvider

如果您需要ImageProvider,请使用以下选项之一:

  • AssetImage()
  • NetworkImage()
  • FileImage()
  • MemoryImage()

将ImageProvider转换为镜像

如果您有一个ImageProvider对象,并且您想要一个Image小部件,那么请执行以下操作:

Image(
  image: myImageProvider,
)

将镜像转换为ImageProvider

如果您有一个Image小部件,并且需要它的ImageProvider,请执行以下操作:

myImageWidget.image
vsaztqbk

vsaztqbk2#

图像是显示图像的小部件。
相反,ImageProvider允许您识别图像,而无需确切知道最终资产的位置。当有人想要读取图像时,资产的位置将在稍后被解决。

ny6fqffe

ny6fqffe3#

实际上,每个背景和前景装饰只接受ImageProvider,如AssetImage(),NetworkImage(),FileImage(),MemoryImage()...
当你试图构建一个小部件时,它需要Image.asset(),Image.network(),Image.file(),Image.memory()...

0md85ypi

0md85ypi4#

在Flutter中,ImageProvider是一个抽象类,表示获取图像的方法。
它充当图像数据源和在屏幕上显示图像的Image小部件之间的桥梁。ImageProvider的目的是将图像加载过程与小部件树分离。

ImageProvider类有各种子类,提供不同的加载方式,例如:

AssetImage:从应用程序的资产中加载图像。
网络图片:从URL加载图像。
FileImage:从设备上的文件加载图像。
内存映像:从内存中的原始字节加载图像。
ResizeImage:修改由另一个ImageProvider加载的图像的大小。
要使用ImageProvider,通常将其作为一个参数传递给Image小部件的image参数。下面是一个使用AssetImage从资源加载图像的示例:

示例:

Image( image: AssetImage('assets/images/my_image.png'),);

相关问题