Как использовать StreamBuilder в FirebaseStorage, чтобы информировать мое приложение об изменениях в моем хранилище Firebase? Во флаттере
вот моя задача:
Я использую следующий пример из https://firebase.flutter.dev/docs/storage/usage/ для загрузки изображений в FireBaseStorage из моей телефонной галереи (которая предоставляет мне
String filepath
-Переменная).
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, мой griedView (где отображаются изображения из моего хранилища) не обновляется автоматически.
Но если я изменю свой экран и вернусь, будет показано загруженное вручную изображение.
Похоже, мне нужно что-то вроде StreamBuilder, о котором мое приложение будет информировать всякий раз, когда в моем хранилище происходят изменения.
Есть ли у кого-нибудь идея, как реализовать эту или какие-то другие идеи для решения моей проблемы?
Спасибо
1 ответ
И
- Вызов через периодический интервал, например, каждые 2-3 минуты.
- Создайте облачные функции, которые будут запускаться при загрузке файлов в этот конкретный каталог и изменить значение в RTDB или Firestore. В приложении вы можете прослушать эти данные. В идеале это должна быть просто отметка времени. Вы можете сохранить в своем приложении последнюю метку времени, которую вы получили из базы данных, и если это изменится, просто позвоните
.
Это зависит от вашего варианта использования, что подойдет вам лучше всего.