Streambuilder 帮助 flutter Firebase 存储

Streambuilder help flutter firebase storage

你好,我正在尝试用 flutter 制作一系列图像,但是当我在 firebase 存储中更新照片时,我的应用程序中的照片保持不变。 也许我可以用 streambuilder 做到这一点,但我不知道如何使用它,也无法学习如何使用它。 有谁知道我该怎么做,非常感谢您的帮助。

class _MyHomePageState extends State<MyHomePage> {

  final FirebaseStorage storage = FirebaseStorage(
      app: Firestore.instance.app,
      storageBucket: 'gs:...com/');

  Uint8List imageBytes;
  String errorMsg;

  _MyHomePageState() {
    storage.ref().child('images/opencv.png').getData(100000000000000).then((data) =>
        setState(() {
          imageBytes = data;
        })
    ).catchError((e) =>
        setState(() {
          errorMsg = e.error;
        })
    );
  }

  @override
  Widget build(BuildContext context) {
    var img = imageBytes != null ? Image.memory(
      imageBytes,
      fit: BoxFit.cover,
    ) : Text(errorMsg != null ? errorMsg : "Loading...");

    return new Scaffold(
        appBar: new AppBar(
        ),
        body: new ListView(
          children: <Widget>[
            img,
          ],
        ));
  }
}

当客户端加载的图像发生变化时,Firebase 存储不会自动通知客户端。当您调用 getData() 时,它会获取一次数据,然后就结束了。

如果您想在存储中更改图像时自动重新加载图像,我建议使用其他服务来处理该通知。

例如,您可以使用 Firebase Realtime Database 或 Cloud Firestore 来存储图像的路径和上次修改时间,然后在更新 Storage 中的图像数据时同时更新它。然后您的客户端代码将使用数据库的实时侦听器,并从中获取 load/reload 图像。