Как использовать 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 варианта.

  1. Вызов через периодический интервал, например, каждые 2-3 минуты.
  2. Создайте облачные функции, которые будут запускаться при загрузке файлов в этот конкретный каталог и изменить значение в RTDB или Firestore. В приложении вы можете прослушать эти данные. В идеале это должна быть просто отметка времени. Вы можете сохранить в своем приложении последнюю метку времени, которую вы получили из базы данных, и если это изменится, просто позвоните .

Это зависит от вашего варианта использования, что подойдет вам лучше всего.

Другие вопросы по тегам