将地图列表添加到 Firebase 时出错:Flutter
Posted
技术标签:
【中文标题】将地图列表添加到 Firebase 时出错:Flutter【英文标题】:Error adding List of Map to Firebase: Flutter 【发布时间】:2021-08-16 22:44:41 【问题描述】:我正在尝试将 List
或 Map
添加到我的 Firestore,但它似乎不起作用。
它不工作的原因是因为在我可以为Map
赋值并将其添加到我的List
之前,正在调用Firestore 的写入函数。问题似乎出在async
await
我想,但我看不出代码有什么问题。
这是我用来添加订单请求的函数
Future<String> addOrder(
DateTime startTime,
DateTime endTime,
CartItem cartProduct,
double total,
String restName,
String restLocation,
) async
var userId = FirebaseAuth.instance.currentUser.uid;
final timestamp = DateTime.now();
String error = '';
String restError = '';
String id;
List<Map<String, dynamic>> restItemsMap = [];
try
await FirebaseFirestore.instance
.collection('users/$userId/orders')
.add(
'amount': total,
'dateTime': timestamp.toIso8601String(),
'restaurantName': cartProduct.restaurantName,
'restaurantLocation': restLocation,
'startTime': startTime,
'restaurantId': cartProduct.id,
'status': OrderStatus.Pending.toString(),
'endTime': endTime,
,
)
.then((value) => id = value.id)
.catchError((error)
print('Error adding new order initialization: $error');
return error.toString();
);
cartProduct.restaurantItems.forEach(
(restItem) async
// print('ordered item: $cp');
await FirebaseFirestore.instance
.collection('users')
.doc(userId)
.collection('orders')
.doc(id)
.collection('items')
.doc(restItem.id)
.set(
'name': restItem.name,
'quantity': restItem.quantity,
'price': restItem.price,
,
).catchError((error)
print('Adding rest items initialization: $error');
return error.toString();
);
,
);
/// RESTAURANT REQUEST
cartProduct.restaurantItems.forEach(
(element) async
Map<String, dynamic> restItemMap = ;
final restData = await FirebaseFirestore.instance
.collection('restaurants')
.doc(cartProduct.id)
.collection('restaurantItems')
.doc(element.id)
.get()
.catchError((error)
print('adding rest item error: $error');
return error.toString();
);
if (restData.data()['quantity'] - element.quantity >= 0)
restItemMap =
'id': element.id,
'name': element.name,
'quantity': element.quantity,
'price': element.price,
;
restItemsMap.add(restItemMap);
print('REST MAP: $restItemMap');
else
return 'OUT_OF_STOCK';
,
);
print('REST ARRAY MAP: $restItemsMap');
await FirebaseFirestore.instance
.collection('restaurants')
.doc(cartProduct.id)
.collection('orderRequests')
.doc(id)
.set(
'startTime': startTime,
'endTime': endTime,
'amount': total,
'dateTime': timestamp.toIso8601String(),
'orderId': id,
'status': OrderStatus.Pending.toString(),
'items': restItemsMap,
).catchError((error)
print('adding rest item error: $error');
return error.toString();
);
notifyListeners();
return 'SUCCESS';
catch (error)
print(error);
return 'ERROR';
print('REST ARRAY MAP: $restItemsMap');
语句在 print('REST MAP: $restItemMap');
之前被调用
这是我得到的输出:
颤动:REST 数组映射:[]
flutter: REST MAP: id:bcUM4KmfqCdZ2ffafPDT, name: Donut Meal, 数量: 1, price: 50.0
【问题讨论】:
【参考方案1】:异步调用不会在 forEach
循环中工作。它们将被执行,但您的代码将在不等待它们的情况下通过循环。这就是您看到这种行为的原因。
最好的解决方案是将数据存储到一个数组中并使用for in
循环,async
将按预期工作。
Here 与您的问题类似,有一个解决方案示例。
【讨论】:
以上是关于将地图列表添加到 Firebase 时出错:Flutter的主要内容,如果未能解决你的问题,请参考以下文章
尝试从 Android Studio 添加 Firebase 项目时出错
运行 Gradle 时出错 - gradlew.bat 异常退出(添加 firebase 后出错)
Flutter 和 Firebase:从 Firebase 中的数组中删除项目(地图)
如何将谷歌地图标记的纬度和经度发送到 Firebase - android? [关闭]
将 firebase 数据放入 recyclerview 时出错,“反序列化时需要一个列表,但有一个类 java.lang.String”