首先,我强烈建议您有一个定义所有模式和/或模型的文件,这样您的数据库 struct 就只有一个参考点.类似于某个名为dbSchema.dart的文件:
import 'package:meta/meta.dart';
class Replies {
final String title;
final Map coordinates;
Replies({
@required this.title,
@required this.coordinates,
});
Map<String, dynamic> toJson() =>
{
'title': title,
'coordinates': coordinates,
};
}
并使您想要成为对象类型映射的字段.然后,在要插入到数据库中的页面上,导入dbSchema.dart并创建一个新模型:
Replies _replyObj = new Replies(
title: _topic,
coordinates: _coordinates,
);
这里假设您在此之前已经定义了LOCAL_COLISTRATES(或其他任何)对象,如下所示:
_coordinates = {
'lat': '40.0000',
'lng': '110.000',
};
然后要插入到FiRestore中,请添加对象的toJson方法(不能插入/更新普通DART模型):
CollectionReference dbReplies = Firestore.instance.collection('replies');
Firestore.instance.runTransaction((Transaction tx) async {
var _result = await dbReplies.add(_replyObj.toJson());
....
更新(5/31)
要将读回的文档转换回对象,需要在类中添加一个fromJson
,如下所示:
Replies.fromJson(Map parsedJson) {
id = parsedJson['id']; // the doc ID, helpful to have
title = parsedJson['title'] ?? '';
coordinates = parsedJson['coordinates'] ?? {};
}
因此,当您查询数据库时:
QuerySnapshot _repliesQuery = await someCollection
.where('title', isEqualTo: _title)
.getDocuments();
List<DocumentSnapshot> _replyDocs = _repliesQuery.documents;
您可以从每个快照创建对象:
for (int _i = 0; _i < _replyDocs.length; _i++) {
Replies _reply = Replies.fromJson(_replyDocs[_i].data);
_reply.id = _replyDocs[_i].documentID;
// do something with the new _reply object
}