База данных Firebase в реальном времени Переопределяет мои данные в определенном месте, даже когда я использую метод .push()

# #firebase #flutter #firebase-realtime-database

#огневая база #трепетать #firebase-база данных в реальном времени

Вопрос:

База данных Firebase в реальном времени Переопределяет мои данные в определенном месте, даже когда я использую метод .push (). Мои немногочисленные конкретные знания о записи в базу данных Firebase в реальном времени заключаются в том, что запись в базу данных Firebase в реальном времени может быть выполнена несколькими способами. Двумя из наиболее заметных являются

  1. установите() и 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)