Firebase 向Cloud Firestore添加阵列(颤振/飞镖)

Firebase 向Cloud Firestore添加阵列(颤振/飞镖),firebase,flutter,dart,google-cloud-firestore,Firebase,Flutter,Dart,Google Cloud Firestore,您好,我正在尝试向我的收藏中添加一个名为“fitbit_activity”的文档,该文档包含一个距离数组,这是我基于fitbit的JSON自行制作的模型。下面是模型的样子: class Distances { String activity; var distance; Distances({this.activity, this.distance}); factory Distances.fromJson(Map<String, dynamic> parsedJ

您好,我正在尝试向我的收藏中添加一个名为“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 : 
最后,这是我将数据添加到firestore数据库的代码:

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
E/flatter(4149):[错误:flatter/lib/ui/ui\u dart\u state.cc(148)]未处理的异常:无效参数:“距离”的实例
E/flatter(4149):#0 StandardMessageCodec.writeValue
软件包:flatter/../services/message\u编解码器。dart:392
E/flatter(4149):#1 FirestoreMessageCodec.writeValue
包:cloud\u firestore/src/firestore\u message\u codec.dart:64
E/flatter(4149):#2 StandardMessageCodec.writeValue
软件包:flatter/../services/message_codecs.dart:382
E/flatter(4149):#3 FirestoreMessageCodec.writeValue
包:cloud\u firestore/src/firestore\u message\u codec.dart:64
E/flatter(4149):#4 StandardMessageCodec.writeValue。
软件包:flatter/../services/message\u codecs.dart:389
E/flatter(4149):#5 LinkedHashMapMixin.forEach(dart:collection patch/compact_hash.dart:377:8)
E/flatter(4149):#6 StandardMessageCodec.writeValue
软件包:flatter/../services/message_codecs.dart:387
E/flatter(4149):#7 FirestoreMessageCodec.writeValue
包:cloud\u firestore/src/firestore\u message\u codec.dart:64
E/flatter(4149):#8 StandardMessageCodec.writeValue。
软件包:flatter/../services/message\u codecs.dart:389
E/flatter(4149):#9 LinkedHashMapMixin.forEach(dart:collection patch/compact_hash.dart:377:8)
E/flatter(4149):#10 StandardMessageCodec.writeValue
软件包:flatter/../services/message_codecs.dart:387
E/flatter(4149):#11 FirestoreMessageCodec.writeValue
包:cloud\u firestore/src/firestore\u message\u codec.dart:64
E/flatter(4149):#12 StandardMethodCodec.encodeMethodCall
软件包:flatter/../services/message\u编解码器。dart:524
E/颤振(4149):#13方法Channel.invokeMethod
包装:颤振/../services/平台\通道。dart:311
E/颤振(4149):
E/颤振(4149):#14文件参考.setData
包:cloud\u firestore/src/document\u reference.dart:51

我是否应该在地图中写一个循环,以便将其添加到数据库中?任何帮助都将不胜感激!提前谢谢你

看起来您的
distance
类缺少序列化方法

添加一个执行以下操作的
toJson
方法:

类距离{
...
映射到JSON(){
返回{
“活动”:活动,
“距离”:距离,
};
}
}
然后,在将数据存储到Firestore之前,必须为数组中的每个项添加对该方法的调用

。。。
“距离”:fitbitActivityApiVar
.摘要
.距离
.map((距离)=>distance.toJson())
.toList(),
});

希望对您有用

谢谢!这管用!我应该为我应该在数据库中编写的所有数组的所有Json类添加一个序列化方法吗?不客气,在所有应该存储到数据库的模型上实现
toJson
方法是一个很好的做法。它使您在将来更容易重构和更新您的模型。好的,非常感谢!
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