Firestore onRemove не вызывается, когда документ соответствует условию - PullRequest
0 голосов
/ 21 сентября 2019

У меня есть условие истечения срока действия, например Snapchat, когда истекает время истечения, а затем удаляет документ из запроса, но оно не работает, пока приложение не будет перезагружено или не закроет открытое окно, а не в реальном времени.

Код:

Services().crud.readStream(
    stream: this
        .collection
        .where('user', isEqualTo: APIs().users.collection.document(cUserID))
        .where('removeAt', isGreaterThan: Timestamp.now())
        .snapshots(),
    onEmpty: () {
      onEmpty(null);
    },
    onAdded: (p) {
      onAdded(Post().model(id: p.documentID, map: p.data));
      return null;
    },
    onModified: (p) {
      onModified(Post().model(id: p.documentID, map: p.data));
      return null;
    },
    onRemoved: (p) {
      onRemoved(Post().model(id: p.documentID, map: p.data));
      return null;
    },
    onFailure: (e) {
      onFailure(e);
      return null;
    });

Дело в том, что он работает, только не в реальном времени.Я что-то упустил?

1 Ответ

0 голосов
/ 21 сентября 2019

Проблема возникает из этой строки:

.where('removeAt', isGreaterThan: Timestamp.now())

Это оценивается при выполнении запроса, и это означает, что Timestamp.now() устанавливается при запуске запроса.Таким образом, он получит документы, срок действия которых не истек при запуске запроса, но он не будет динамически обновляться, пока слушатель активен (поскольку Timestamp.now() не переоценивается).

Есть (в настоящее время)) нет способа иметь динамически обновляемую метку времени в запросе Firestore.Но, к счастью, у вас есть вся информация, чтобы реализовать динамический срок действия в клиенте.Поскольку вы знаете значение removeAt для каждого документа, вы можете запускать периодическую проверку и удалять или скрывать документы, срок действия которых истек в то время, когда прослушиватель снимков был активен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...