Я создаю случайное приложение для чата с 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,
});