如何在 FirebaseStorage 中使用 StreamBuilder 来通知我的应用我的 Firebase 存储发生变化?在颤振中

Posted

技术标签:

【中文标题】如何在 FirebaseStorage 中使用 StreamBuilder 来通知我的应用我的 Firebase 存储发生变化?在颤振中【英文标题】:How to use StreamBuilder in FirebaseStorage to inform my App from changes in my Firebase Storage? In Flutter 【发布时间】:2021-08-03 13:45:33 【问题描述】:

这是我的挑战:

我正在使用来自https://firebase.flutter.dev/docs/storage/usage/ 的以下示例 将图像从我的手机图库上传到我的 FireBaseStorage(它为我提供了String filepath-variable)。

    Future<void> handleTaskExample2(String filePath) async 
      File largeFile = File(filePath);
    
      firebase_storage.UploadTask task = firebase_storage.FirebaseStorage.instance
          .ref('uploads/picture-to-upload.jpeg')
          .putFile(largeFile);
    
      task.snapshotEvents.listen((firebase_storage.TaskSnapshot snapshot) 
        print('Task state: $snapshot.state');
        print(
            'Progress: $(snapshot.bytesTransferred / snapshot.totalBytes) * 100 %');
      , onError: (e) 
        print(task.snapshot);
        if (e.code == 'permission-denied') 
          print('User does not have permission to upload to this reference.');
        
      );
      try 
        await task;
        print('Upload complete.');
       on firebase_core.FirebaseException catch (e) 
        if (e.code == 'permission-denied') 
          print('User does not have permission to upload to this reference.');
        
        // ...
      
    

实际上,一切正常。我上传到存储的图像会显示在应用程序内的 GridView 中...

但是,如果我通过 FireBase 网站手动将图像上传到我的存储中,我的 gridView(显示我存储中的图片的位置)不会自动更新。

但是如果我换屏再回来,就会显示手动上传的图片。

看起来我需要 StreamBuilder 之类的东西,只要我的存储发生变化,我的应用就会收到通知。

有没有人知道如何实现这个或任何其他想法来解决我的问题?

谢谢

【问题讨论】:

【参考方案1】:

listAlllist 只获取一次数据,因此很遗憾您无法在它们上使用流。这里有 2 个选项。

    每隔 2-3 分钟定期调用 listAll 创建一个云函数,当文件上传到该特定目录并更改 RTDB 或 Firestore 中的值时触发该函数。在应用程序中,您可以收听该数据。理想情况下,它应该只是一个时间戳。您可以在您的应用中存储您从数据库中获得的最后一个时间戳,如果发生更改,只需调用 listAll

这取决于您的用例,什么最适合您。

【讨论】:

谢谢塔里克。我很欣赏您的 2 个选项 :) 我将不得不尝试哪种解决方案最适合我...

以上是关于如何在 FirebaseStorage 中使用 StreamBuilder 来通知我的应用我的 Firebase 存储发生变化?在颤振中的主要内容,如果未能解决你的问题,请参考以下文章

FirebaseStorage:如何删除目录

FirebaseStorage:如何删除目录

无法在 FirebaseStorage 上上传图片

FirebaseStorage + Flutter,streamBuilder?

无法使用 Flutter 将文件上传到 FirebaseStorage

身份验证在 FirebaseStorage Flutter 中不起作用