Как я могу сохранить две записи с идентификатором другого в флаттере?

Как я могу сохранить две записи с идентификатором другого в флаттере?

Я пытаюсь сохранить две записи с идентификатором другого, я могу это сделать, но когда я пытаюсь сохранить более двух одновременно, какой-то идентификатор приходит с пустым. Это мой код:

collectionReferenceRel.add({
  'idRoom': id,
  'room': rel,
  'rel': room,
  'id': '',
}).then((idRel) {
   idRel1 = idRel.id;
 },
);
collectionReferenceRel.add({
  'idRoom': id,
  'room': room,
  'rel': rel,
  'id': '',
}).then((value2) {
  idNode2 = value2.id;
}).whenComplete(() async {
  await collectionReferenceRel.doc(idRel1).update({
  'id': idRel2,
 });
 await collectionReferenceRel.doc(idRel2).update({
 'id': idRel1,
 });
}).catchError((error) {
 CustomFullScreenDialog.cancelDialog();
 CustomSnackBar.showSnackBar(
     context: Get.context,
     title: 'Error',
     message: 'Something went wrong',
     backgroundColor: Colors.green);
 [![enter image description here][1]][1] }, 
 );
Ускорьте разработку веб-приложений Laravel с помощью этих бесплатных стартовых наборов
Ускорьте разработку веб-приложений Laravel с помощью этих бесплатных стартовых наборов
Laravel - это мощный PHP-фреймворк, используемый для создания масштабируемых и надежных веб-приложений. Одним из преимуществ Laravel является его...
Что такое двойные вопросительные знаки (??) в JavaScript?
Что такое двойные вопросительные знаки (??) в JavaScript?
Как безопасно обрабатывать неопределенные и нулевые значения в коде с помощью Nullish Coalescing
Создание ресурсов API Laravel: Советы по производительности и масштабируемости
Создание ресурсов API Laravel: Советы по производительности и масштабируемости
Создание API-ресурса Laravel может быть непростой задачей. Она требует глубокого понимания возможностей Laravel и лучших практик, чтобы обеспечить...
Как сделать компонент справочного центра с помощью TailwindCSS
Как сделать компонент справочного центра с помощью TailwindCSS
Справочный центр - это веб-сайт, где клиенты могут найти ответы на свои вопросы и решения своих проблем. Созданный для решения многих распространенных...
Асинхронная передача данных с помощью sendBeacon в JavaScript
Асинхронная передача данных с помощью sendBeacon в JavaScript
В современных веб-приложениях отправка данных из JavaScript на стороне клиента на сервер является распространенной задачей. Одним из популярных...
Как подобрать выигрышные акции с помощью анализа и визуализации на Python
Как подобрать выигрышные акции с помощью анализа и визуализации на Python
Отказ от ответственности: Эта статья предназначена только для демонстрации и не должна использоваться в качестве инвестиционного совета.
1
0
64
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Https://api.flutter-io.cn/flutter/dart-async/Future/wait.html


Future.wait([
collectionReferenceRel.add({
  'idRoom': id,
  'room': rel,
  'rel': room,
  'id': '',
}).then((idRel) {
   idRel1 = idRel.id;
 },
),
collectionReferenceRel.add({
  'idRoom': id,
  'room': room,
  'rel': rel,
  'id': '',
}).then((value2) {
  idNode2 = value2.id;
})
]).whenComplete(() async {
  await collectionReferenceRel.doc(idRel1).update({
  'id': idRel2,
 });
 await collectionReferenceRel.doc(idRel2).update({
 'id': idRel1,
 });
}).catchError((error) {
 CustomFullScreenDialog.cancelDialog();
 CustomSnackBar.showSnackBar(
     context: Get.context,
     title: 'Error',
     message: 'Something went wrong',
     backgroundColor: Colors.green);
 [![enter image description here][1]][1] }, 
 );

Рассмотрите возможность использования метода set(), предоставленного API-интерфейсом облачного хранилища.

Пример использования из ссылки.

final city = <String, String>{
  "name": "Los Angeles",
  "state": "CA",
  "country": "USA"
};

db.collection("cities")
  .doc("LA")
  .set(city)
  .onError((e, _) => print("Error writing document: $e"));

Для сохранения более одного документа подумайте о том, чтобы связать его с Future wait для чистого кода.

 /// Create a list to add all documents
 final List docs = [];


 /// create the documents with unique identifiers 
 /// beforehand using a package such as `Uuid`
 final docA = {
  'id': 'unique_identifier_a',
  'idRoom': id,
  'room': rel,
  'rel': room,
 }

 docs.add(docA);

 final docB = {
  'id': 'unique_identifier_b',
  'idRoom': id,
  'room': rel,
  'rel': room,
 }

 docs.add(docB);

/// Create futures from the documents
final futures = docs.map((e) => collectionRef.doc(e.id).set(e));
 

/// Save the documents in shot and wait for all
await Future.wait(futures);

Другие вопросы по теме