使用NetworkImage显示来自Google云端硬盘的图像

时间:2020-01-21 21:07:11

标签: flutter

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

以上所有方法均无效。它将引发以下错误:

抛出了以下_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),
          ),
        ),
      ),
    ),

3 个答案:

答案 0 :(得分:3)

以下是步骤:

  1. 右键单击图像,然后单击Share,如下所示; enter image description here

  2. 在出现的对话框中,确保从下拉列表中选择的选项是 Anyone with the link can view如下所示: enter image description here

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

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

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

  5. 复制 ,在我的情况下为1VdjEgb0aZl9IZa2jOzGU5_SNbmlmeiCj

  6. 以以下格式将其添加到下面的此链接:

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

  7. 例如,在我的情况下,最终链接为:

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

  8. 最后获取该链接并粘贴到NetworkImage()Image.network()小部件中,然后完成操作

答案 1 :(得分:0)

您必须像下面那样修改链接:

https://drive.google.com/open?id=1PpUCg8U0YkedIPYmm2NtLXt00JsdBJt2

上进行链接共享时,由Google云端硬盘给出的链接

现在用 uc?export = download&

替换Url中的打开?

因此将与NetworkImage()小部件一起使用的网址为:https://drive.google.com/uc?export=download&id=1PpUCg8U0YkedIPYmm2NtLXt00JsdBJt2

答案 2 :(得分:0)

嗯,结果是问题中提到的所有选项都起作用。无需更改。问题在于图像是私有的,因此无法获取它们。为了获取图像,我必须实现Google Sign In

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

NetworkImage(imgUrl, headers: {"Authorization": "Bearer ${accessToken}"})

之后,我能够使用任何url来获取图像。