? Firebase 图像提供程序

pub package

适用于 Firebase Cloud Storage 图像对象的缓存 Flutter ImageProvider。

如何使用

确保您已在所有要使用的平台上 设置好 Firebase

将图像的 URI(例如 `gs://bucket123/userIcon123.jpg`)提供给 `FirebaseImage` widget,然后将其放入任何接受 `ImageProvider` 的 widget 中(大多数图像相关的 widget 都可以,例如 `Image`、`ImageIcon` 等)。请注意,目前您确实需要 `gs://` 前缀。

请参阅下面的示例代码。

它是如何工作的?

代码会将图像(对象)作为字节数组下载到内存中。

除非使用 `cacheRefreshStrategy: CacheRefreshStrategy.NEVER` 选项禁用,否则它会从元数据中获取对象的最后更新时间(一个毫秒精度的整数时间戳),并将其用作事实上的版本号。因此,对该远程对象的任何更新都将导致下载新版本。

内存中的图像字节数组然后被保存到应用程序临时目录中的一个文件中,该位置保存在持久化数据库中。但是,操作系统可以随时清理此目录。

元数据检索是“B 类操作”,每月有 50,000 次免费操作。之后,每次操作的费用为 0.04 美元/100,000 次操作,因此 `cacheRefreshStrategy: CacheRefreshStrategy.BY_METADATA_DATE` 的默认行为可能会产生额外费用,如果对象从未更改过。这使得此实现成为一种经济高效的缓存策略,因为不必传输整个对象就可以检查是否有任何更新。本质上,任何图像只需要在每个设备上下载一次。

示例

import 'package:flutter/material.dart';
import 'package:firebase_image/firebase_image.dart';

class IconImage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Firebase Image Provider example'),
      ),
      body: Image(
        image: FirebaseImage('gs://bucket123/userIcon123.jpg'),
        // Works with standard parameters, e.g.
        fit: BoxFit.fitWidth,
        width: 100,
        // ... etc.
      ),
    );
  }
}

待办事项

  • 将示例添加到 pub.dev
  • 在一定时间(2周?)后清除未访问的缓存项
  • 添加更多文档/注释
  • 创建单元测试

贡献

如果您想做出贡献,请 fork 该项目并在那里玩!

如果您缺乏想法,请查看 Issues 或上面的待办事项列表以获取灵感。

请查看 PR 和其他人的 fork,看看是否有人在做与您想做的事情类似的工作。

准备好后,请提交一个 pull request。

GitHub

查看 Github