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

Pet*_*vin 10 flutter flutter-layout

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

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

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

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

错误:无法将参数类型“Image”分配给参数类型“ImageProvider”。

Sur*_*gch 11

图像与图像提供者

图像提供程序是将图像提供给图像小部件。;D

图像提供者不一定在那里拥有图像,但它知道如何获取它。

获取图像

如果您需要Image小部件,请使用以下之一:

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

获取 ImageProvider

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

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

将 ImageProvider 转换为图像

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

Image(
  image: myImageProvider,
)
Run Code Online (Sandbox Code Playgroud)

将图像转换为 ImageProvider

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

myImageWidget.image
Run Code Online (Sandbox Code Playgroud)


小智 6

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

相反,ImageProvider 允许您在不确切知道最终资产在哪里的情况下识别图像。当有人想要读取图像时,资产的位置将在稍后解决。