如何在 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】:listAll
和 list
只获取一次数据,因此很遗憾您无法在它们上使用流。这里有 2 个选项。
-
每隔 2-3 分钟定期调用
listAll
创建一个云函数,当文件上传到该特定目录并更改 RTDB 或 Firestore 中的值时触发该函数。在应用程序中,您可以收听该数据。理想情况下,它应该只是一个时间戳。您可以在您的应用中存储您从数据库中获得的最后一个时间戳,如果发生更改,只需调用 listAll
。
这取决于您的用例,什么最适合您。
【讨论】:
谢谢塔里克。我很欣赏您的 2 个选项 :) 我将不得不尝试哪种解决方案最适合我...以上是关于如何在 FirebaseStorage 中使用 StreamBuilder 来通知我的应用我的 Firebase 存储发生变化?在颤振中的主要内容,如果未能解决你的问题,请参考以下文章
FirebaseStorage + Flutter,streamBuilder?