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

时间:2019-11-27 18:23:52

标签: flutter flutter-layout

有与该主题相关的答案,但它们提供了解决方法,而不是解释。

为什么在需要ImageProvider的地方不能使用Image?从概念上讲,它们对我来说听起来是一样的。

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

尝试直接使用图像产生的错误是:

  

错误:参数类型'Image'不能分配给参数类型'ImageProvider'。

2 个答案:

答案 0 :(得分:10)

图像与图像提供者

图像提供程序是将图像提供给图像小部件。 ;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

答案 1 :(得分:1)

图像是显示图像的小部件。

ImageProvider允许您在不知道最终资产确切位置的情况下识别图像。资产的位置将在以后有人要读取图像时解决。