【问题标题】: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”。

【问题讨论】:

标签: flutter flutter-layout


【解决方案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()...

      【讨论】:

        猜你喜欢
        • 2020-03-11
        • 2018-03-23
        • 2011-01-06
        • 2023-01-26
        • 1970-01-01
        • 2016-02-20
        • 2021-08-04
        • 1970-01-01
        • 2022-07-21
        相关资源
        最近更新 更多