Flutter 中的“Image”和“ImageProvider”有啥区别?
Posted
技术标签:
【中文标题】Flutter 中的“Image”和“ImageProvider”有啥区别?【英文标题】:What is the difference between an "Image" and "ImageProvider" in Flutter?Flutter 中的“Image”和“ImageProvider”有什么区别? 【发布时间】:2020-03-23 09:00:43 【问题描述】:有与此主题相关的答案,但它们提供的是解决方法而不是解释。
为什么不能在需要 ImageProvider 的地方使用 Image?从概念上讲,它们对我来说听起来是一样的。
child: new CircleAvatar(
backgroundImage: NetworkImage("https..."), // works
backgroundImage: Image.asset('images/image.png'), // error
),
尝试直接使用图片产生的错误是:
错误:无法将参数类型“Image”分配给参数类型“ImageProvider”。
【问题讨论】:
请避免使用effective dart guidelines的新关键字 为什么要投反对票?这是一个合理的问题。 【参考方案1】:图像是显示图像的小部件。
ImageProvider 允许您在不知道最终资产的确切位置的情况下识别图像。稍后当有人要读取图像时,将解析资产的位置。
【讨论】:
【参考方案2】:图像与图像提供者
图像提供程序是将图像提供给 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
【讨论】:
【参考方案3】:实际上每个背景和前景装饰都只会接受像 AssetImage(),NetworkImage(),FileImage(),MemoryImage() 这样的 ImageProvider...
当你尝试构建一个小部件时,它会使用 Image.asset()、Image.network()、Image.file()、Image.memory()...
【讨论】:
以上是关于Flutter 中的“Image”和“ImageProvider”有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章