使用 NetworkImage 显示来自 Google Drive 的图像

Mor*_*smo 5 flutter

我正在尝试将一些图像加载到 gridview 中。每个 GridTile 都包含一个带有使用 NetworkImage 装饰的容器。我使用的所有图像都存储在 google drive 中,问题是由于某种原因,flutter 不喜欢 Google Drive url。我试过以下网址:

以上都不起作用。它引发以下错误:

在解析图像编解码器时引发了以下 _Exception:异常:无法实例化图像编解码器。

我注意到所有这些 url 最终都重定向到另一个链接,可能是图像被缓存的地方。这就是不工作的原因吗?如果是这样,我如何强制它遵循重定向?

这是相关的一段代码:

String imgUrl = "https://drive.google.com/file/d/$fileId/view";
GridTile(
    child: InkWell(
      onTap: () {
        openDriveImage(fileId);
      },
      child: Container(
        margin: EdgeInsets.all(5.0),
        decoration: BoxDecoration(
          border: Border.all(
            color: Colors.black38,
          ),
          shape: BoxShape.rectangle,
          image: DecorationImage(
            fit: BoxFit.fitWidth,
            image: NetworkImage(imgUrl),
          ),
        ),
      ),
    ),
Run Code Online (Sandbox Code Playgroud)

Pet*_*uyo 13

以下是步骤:

  1. 右击图片,点击Share如下图;在此处输入图片说明

  2. 在出现的对话框中,确保从下拉列表中选择的选项 Anyone with the link can view如下所示: 在此处输入图片说明

  3. 之后,单击Copy link然后将其粘贴到某处

  4. 它应该是这样https://drive.google.com/file/d/1VdjEgb0aZl9IZa2jOzGU5_SNbmlmeiCj/view?usp=sharing的格式

    https://drive.google.com/file/d/ <FILE_ID> /view?usp=sharing

  5. 复制<FILE_ID>在我的情况下是1VdjEgb0aZl9IZa2jOzGU5_SNbmlmeiCj

  6. 按以下格式将其附加到以下链接中:

    https://drive.google.com/uc?export=view&id= <FILE_ID>

  7. 以我为例,最后一个链接是:

    https://drive.google.com/uc?export=view&id=1VdjEgb0aZl9IZa2jOzGU5_SNbmlmeiCj

  8. 最后获取该链接并粘贴到一个NetworkImage()Image.network()小部件中,您就完成了


Mor*_*smo 1

嗯,结果是问题中提到的所有选项都有效。没有什么需要改变的。问题是图像是私有的,因此无法获取它们。为了获取图像,我必须实现Google Sign In

用户登录后,我只需获取访问令牌并将其放入 NetworkImage 类的标头中,如下所示:

NetworkImage(imgUrl, headers: {"Authorization": "Bearer ${accessToken}"})
Run Code Online (Sandbox Code Playgroud)

之后,我就可以使用任何 url 获取图像。