Дождаться экрана, пока документ не будет добавлен в коллекцию Firestore? - PullRequest
0 голосов
/ 05 января 2019

Я создаю случайное приложение для чата с Flutter и Firestore.

Когда первый пользователь хочет общаться в чате, я хочу показать экран ожидания (CircularProgressIndicator). Когда второй пользователь присоединяется к чату, я хочу показать основной экран чата.

Но как сделать так, чтобы клиентское приложение непрерывно слушало присоединение user2? Основываясь на моей схеме Firestore, он должен прослушивать, чтобы user2 присоединился к подколлекции /roomUsers (user2 добавляется как UID имени документа). У этого подколлекции уже есть данные для первого пользователя, поэтому он не может просто прослушать, если у подколлекции есть данные.

@ jurrdb опубликовал этот код в stackoverflow:

class MyScreen extends StatefulWidget {

  @override
  _MyScreenState createState() => _MyScreenState();
}

class _MyScreenState extends State<MyScreen> {
  Widget _screen;

  @override
  void initState() {
    _screen = CircularProgressIndicator();

    _doSomeFirebaseChecking();
  }

  void _doSomeFirebaseChecking() async {
    // Add your code that performs checks at Firebase here.

    // Then use setState to update the widget to a screen of choice.
    setState(() {

    });
  }
}

Я пытаюсь использовать эту модель, но не знаю, как заставить клиентское приложение постоянно проверять подколлекцию Firestore.

Я пытаюсь получить документы из /roomUsers подколлекции и проверить, если documentSnapshot.length > 1, но это выполняется только один раз, поэтому не обновлять, когда user2 присоединиться к чату.

Как можно решить это? Я пытаюсь использовать streambuilder / futurebuilder, но не могу решить.

Спасибо!

Обновление: вот как я пишу "пользовательский документ" в подколлекцию roomUsers:

roomUsersRef = Firestore.instance.collection(‘chats').document(docID).collection(‘roomUsers').document(uid);
await roomUsersRef.setData({
  ‘user2UID': uid,
});
...