firebase - 将数组添加到 Cloud Firestore (Flutter/Dart)
问题描述
您好,我正在尝试将一个名为“fitbit_activity”的文档添加到我的集合中,其中包含一个距离数组,这是我自己基于 Fitbit 的 JSON 制作的模型。所以这里是模型的样子:
class Distances {
String activity;
var distance;
Distances({this.activity, this.distance});
factory Distances.fromJson(Map<String, dynamic> parsedJson) {
return Distances(
activity: parsedJson['activity'],
distance: parsedJson['distance'].toDouble());
}
}
Here is what the API Response for 'Distances' Look like :
"distances": [
{
"activity": "total",
"distance": 5.94
},
{
"activity": "tracker",
"distance": 5.94
},
{
"activity": "loggedActivities",
"distance": 0
},
{
"activity": "veryActive",
"distance": 1.92
},
{
"activity": "moderatelyActive",
"distance": 0.46
},
{
"activity": "lightlyActive",
"distance": 3.26
},
{
"activity": "sedentaryActive",
"distance": 0.23
}
],
最后,这是我将数据添加到我的 firestore db 的代码:
db = Firestore.instance();
await db
.collection('users')
.document(userData[index].uID)
.collection('fitbit_activity')
.document(DateFormat.yMMMd().format(today))
.setData({
'caloriesBMR': _fitbitActivityApiVar.summary.caloriesBMR,
'caloriesBurned': _fitbitActivityApiVar.summary.caloriesBurned,
'fairlyActiveMinutes': _fitbitActivityApiVar.summary.lightlyActiveMinutes,
'lightlyActiveMinutes': _fitbitActivityApiVar.summary.fairlyActiveMinutes,
'veryActiveMinutes': _fitbitActivityApiVar.summary.veryActiveMinutes,
'sedentaryMinutes': _fitbitActivityApiVar.summary.sedentaryMinutes,
'steps': _fitbitActivityApiVar.summary.steps,
'restingHeartRate': _fitbitActivityApiVar.summary.restingHeartRate,
'distances': _fitbitActivityApiVar.summary.distances //I am getting an error here
});
这是错误:
E/flutter ( 4149): [ERROR:flutter/lib/ui/ui_dart_state.cc(148)] Unhandled Exception: Invalid argument: Instance of 'Distances'
E/flutter ( 4149): #0 StandardMessageCodec.writeValue
package:flutter/…/services/message_codecs.dart:392
E/flutter ( 4149): #1 FirestoreMessageCodec.writeValue
package:cloud_firestore/src/firestore_message_codec.dart:64
E/flutter ( 4149): #2 StandardMessageCodec.writeValue
package:flutter/…/services/message_codecs.dart:382
E/flutter ( 4149): #3 FirestoreMessageCodec.writeValue
package:cloud_firestore/src/firestore_message_codec.dart:64
E/flutter ( 4149): #4 StandardMessageCodec.writeValue.<anonymous closure>
package:flutter/…/services/message_codecs.dart:389
E/flutter ( 4149): #5 _LinkedHashMapMixin.forEach (dart:collection-patch/compact_hash.dart:377:8)
E/flutter ( 4149): #6 StandardMessageCodec.writeValue
package:flutter/…/services/message_codecs.dart:387
E/flutter ( 4149): #7 FirestoreMessageCodec.writeValue
package:cloud_firestore/src/firestore_message_codec.dart:64
E/flutter ( 4149): #8 StandardMessageCodec.writeValue.<anonymous closure>
package:flutter/…/services/message_codecs.dart:389
E/flutter ( 4149): #9 _LinkedHashMapMixin.forEach (dart:collection-patch/compact_hash.dart:377:8)
E/flutter ( 4149): #10 StandardMessageCodec.writeValue
package:flutter/…/services/message_codecs.dart:387
E/flutter ( 4149): #11 FirestoreMessageCodec.writeValue
package:cloud_firestore/src/firestore_message_codec.dart:64
E/flutter ( 4149): #12 StandardMethodCodec.encodeMethodCall
package:flutter/…/services/message_codecs.dart:524
E/flutter ( 4149): #13 MethodChannel.invokeMethod
package:flutter/…/services/platform_channel.dart:311
E/flutter ( 4149): <asynchronous suspension>
E/flutter ( 4149): #14 DocumentReference.setData
package:cloud_firestore/src/document_reference.dart:51
我是否应该在地图中编写一个循环,以便将其添加到我的数据库中?任何帮助将不胜感激!先感谢您!
解决方案
看起来您缺少Distances
类的序列化方法。
添加toJson
执行此操作的方法:
class Distances {
...
Map<String, dynamic> toJson() {
return {
"activity": activity,
"distance": distance,
};
}
}
然后,在将数据存储到 Firestore 之前,您必须为数组中的每个项目添加对该方法的调用
...
'distances': _fitbitActivityApiVar
.summary
.distances
.map((distance) => distance.toJson())
.toList(),
});
希望对你有用
推荐阅读
- ignite - Does Ignite support GPB serialized data
- python - 用于 CRUD 的 Django REST API 一个端点
- wpf - WPF文本框,无法编辑文本……快要放弃了
- sas - 从 sas 中的 char 变量中删除特定字符串
- android - 寻找有关如何创建这两个浮动操作按钮外观按钮的指导
- android - Android Emulator Wear OS P - There's an internal problem with your device
- vba - 将 Sheet1 和 Sheet2 中的值复制粘贴到上传工作表中
- python - Python regex: Get regex pattern in a text file and store in an array or list
- amazon-web-services - 如何使用 CloudFormation 将 RDS 错误日志发布到 CloudWatch?
- java - Unable to add a logic to sort with dates in the existing comparator in Java/android