# #firebase #flutter #firebase-realtime-database
#огневая база #трепетать #firebase-база данных в реальном времени
Вопрос:
База данных Firebase в реальном времени Переопределяет мои данные в определенном месте, даже когда я использую метод .push (). Мои немногочисленные конкретные знания о записи в базу данных Firebase в реальном времени заключаются в том, что запись в базу данных Firebase в реальном времени может быть выполнена несколькими способами. Двумя из наиболее заметных являются
- установите() и 2. метод push ().
Короче говоря, push() используется для создания нового ключа для записи данных и добавления данных в узел.
Так что прекрасно, firebase сотрудничает со мной в моих предыдущих проектах, но в этом я понятия не имею, что происходит. Я пробовал различные сочетания усилий и стремился к достижению своей цели, но пока никакого прогресса.
В приведенном ниже коде я хочу добиться 2 вещей: записать идентификатор чата, сообщение и время только один раз, но написать несколько ‘-MqBBXPzUup7czdG2xCI’ все под одним и тем же узлом «firebaseGeneratedId1» -gt;
Более совершенная структура приведена ниже.
Обновить
Вот мой код, на который ссылаются авторы
_listeningMsgRef = _msgDatabase .reference() .child('users') .child(userId) .child('chats') .child(chatUIDConcat);
Когда пользователь нажимает SendMessage, вот функция, называемая
void sendMessage() { _messageController.clear(); var timeSent = DateTime.now().toString(); //Send Map msgMap = { 'message': msg, 'sender': userId, 'time': timeSent, 'chatUID': chatUIDConcat }; //String _key = _listeningMsgRef.push().key; _listeningMsgRef.child(chatUIDConcat).set().whenComplete(() { SnackBar snackBar = const SnackBar(content: Text('Message sent')); ScaffoldMessenger.of(context).showSnackBar(snackBar); DatabaseReference push = _listeningMsgRef.child(chatUIDConcat).push().set(msgMap); }); }
Идея функции SendMessage состоит в том, чтобы написать
chatUID:"L8pacdUOOohuTlifrNYC3JALQgh2 q5D38xPXVBTwmwb5Hq..." message: "I'm coming" newMessage: "true" sender: "L8pacdUOOohuTlifrNYC3JALQgh2"
Когда это будет завершено, затем вставьте новые узлы в пользовательские узлы.
Комментарии:
1. Пожалуйста, отредактируйте свой вопрос, чтобы показать код, который работает не так, как вы ожидаете/хотите. Это сделает гораздо более вероятным, что кто-то сможет помочь объяснить, что делает код и как заставить его делать то, что вы хотите.
2. Я приношу извинения за поздний ответ. Stackoverflow причинял мне боль, пытаясь отформатировать мой код.
Ответ №1:
Пути в базе данных Firebase в реальном времени автоматически создаются при записи любых данных в разделе «Затем» и удаляются при удалении последних данных в них.
Таким образом, вам не нужно сначала создавать узел для комнаты чата. Вместо этого он автоматически создается, когда вы записываете в него первое сообщение с _listeningMsgRef.child(chatUIDConcat).push().set(msgMap)