Неспособность записать данные в FireStore, используя флаттер и FireBase - PullRequest
0 голосов
/ 26 января 2020

Я пытаюсь записать некоторые данные в хранилище, точнее, в коллекцию, содержащую документ, в котором есть несколько полей, но по какой-то причине он не работает.

 void createChatRoom() async {
    instructorUID = (await FirebaseAuth.instance.currentUser()).uid;
    chatRoomID = clientUID + instructorUID;

    if(db.collection('chatrooms').document(chatRoomID) == null) {
      db.collection('chatrooms').document(chatRoomID).setData({
        'instructor': instructorUID,
        'instructorName': widget.name,
        'client': clientUID,
        'clientPhoneNo': clientPhoneNo,
        'createdAt': Timestamp.now(),
      });
    }

    Navigator.push(
      context, 
      MaterialPageRoute(
        builder: (context) => ChatPage(
          chatRoomID: chatRoomID,
          clientUID: clientUID,
        ),
      ),
    );
  }

Возможно, я не назначаю chatRoomId хорошо

Ответы [ 2 ]

2 голосов
/ 26 января 2020

Чтобы заставить его работать, мне пришлось переписать оператор if, как предложил Ричард, и создать метод сохранения данных, чтобы использовать асинхронное программирование по назначению:

void saveData() async {
    await db.collection('instructori').document(instructorUID).collection('chatrooms').document(chatRoomID).setData({
        'instructor': instructorUID,
        'instructorName': widget.name,
        'clientPhoneNo': clientPhoneNo,
        'client': clientUID,
        'createdAt': FieldValue.serverTimestamp(),
      });
  }

void createChatRoom() async {
   instructorUID = (await FirebaseAuth.instance.currentUser()).uid;
   chatRoomID = "test";

   if(await db.collection('instructori').document(instructorUID).collection('chatrooms').document(chatRoomID).get() == null)
   {
      print(instructorUID);
      saveData();
   }
1 голос
/ 26 января 2020

Похоже, что условие в вашем операторе if всегда будет ложным, поскольку он сравнивает объект DocumentReference со значением null. Вместо этого вы должны сначала вызвать get для DocumentReference (используя await), а затем сравнить этот результат с нулевым. Если это значение равно null, вам следует вызвать «setData».

Например:

if(await db.collection('chatrooms').document(chatRoomID).get() == null)

Также я считаю, что «await» следует использовать для ожидания вызова «setData».

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