Странное поведение при записи данных в Firebase

#firebase #flutter #google-cloud-firestore

#firebase #флаттер #google-облако-firestore

Вопрос:

Когда я добавляю данные в поток в приложении, они будут добавлены, но с пустыми полями. Затем, если я добавлю данные снова, они покажут прошлую запись, и процесс повторится. Иными словами, записанные данные отображаются в последующем документе (после его создания).

 onPressed: () async {
      //save data to firebase

      await db.collection("Contacts").add(
        {
          'Name': widget.contact.name,
          'PhoneNumber': widget.contact.phoneNumber,
          'Location': widget.contact.location,
          'Birthday': widget.contact.birthday,
          'Notes': widget.contact.notes
        },
      );
      widget.contact.name = oneController.text;
      widget.contact.phoneNumber = int.parse(twoController.text);
      widget.contact.location = threeController.text;
      widget.contact.birthday = int.parse(sixController.text);
      widget.contact.notes = sevenController.text;

      Navigator.pushReplacementNamed(context, "/second");
    })
  

Комментарии:

1. Пожалуйста, поделитесь некоторым кодом, в котором у вас возникла проблема.

2. Хорошо, я добавил некоторые

Ответ №1:

Попробуйте изменить порядок.

 onPressed: () async {
//save data to firebase
widget.contact.name = oneController.text;
widget.contact.phoneNumber = int.parse(twoController.text);
widget.contact.location = threeController.text;
widget.contact.birthday = int.parse(sixController.text);
widget.contact.notes = sevenController.text;

await db.collection("Contacts").add(
    {
        'Name': widget.contact.name,
        'PhoneNumber': widget.contact.phoneNumber,
        'Location': widget.contact.location,
        'Birthday': widget.contact.birthday,
        'Notes': widget.contact.notes
    },
);
 
Navigator.pushReplacementNamed(context, "/second");
})
  

Ответ №2:

Вам необходимо установить значения вашего контроллера, прежде чем добавлять DB. Вот почему вы добавляете нулевое значение в первый раз. Попробуйте заменить приоритет ваших кодов следующим образом:

      widget.contact.name = oneController.text;
     widget.contact.phoneNumber = int.parse(twoController.text);
     widget.contact.location = threeController.text;
     widget.contact.birthday = int.parse(sixController.text);
     widget.contact.notes = sevenController.text;

     await db.collection("Contacts").add(
      {
       'Name': widget.contact.name,
       'PhoneNumber': widget.contact.phoneNumber,
       'Location': widget.contact.location,
       'Birthday': widget.contact.birthday,
       'Notes': widget.contact.notes
      },
    );