firebase - 使用 Flutter 向 Cloud Firestore 添加对象
问题描述
我想在我的 Flutter 应用程序中向 Google Cloud Firestore 添加一个对象,如下所示:
我已经做了一个回复类:
class Reply {
Reply(this.replyName, this.replyText, this.replyVotes);
final String replyName;
final String replyText;
final String replyVotes;
String getName() {
return replyName;
}
String getText() {
return replyText;
}
String getVotes() {
return replyVotes;
}
}
如何将回复对象添加到云 Firestore?
编辑:
为了澄清,我想创建一个数据类型的字段,Object
其中包含字段:回复对象图像
解决方案
首先,我强烈建议您使用一个文件来定义您的所有模式和/或模型,以便您的数据库结构有一个单一的参考点。像一些名为 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,
};
}
并使您希望成为对象类型 Map 的字段。然后,在您要插入数据库的页面上,导入 dbSchema.dart 并创建一个新模型:
Replies _replyObj = new Replies(
title: _topic,
coordinates: _coordinates,
);
这假设您在此之前已经定义了本地 _coordinates (或其他)对象,例如:
_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)
要将读取的文档转换回对象,您需要将 a 添加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
}
推荐阅读
- flutter - 如何使用 Flutter 让我的页面滚动?
- sass - 尝试使用 @use 规则时出现 SASS 模块错误
- flutter - Flutter 在重新创建 Widget 时重置 StatefulWidget 状态
- json - 我无法在谷歌应用脚本中解析 JSON
- sql - 为什么 group by 被强制在特定列上而不是在其他列上
- php - 在 WooCommerce 中检索客户可用的运输方式详细信息
- python - Music21:获取音符的曲目索引
- python - 遍历文件名列表以查看文件名是否在字典值中(值是列表),然后打印键和文件名
- javascript - plotly.js 页面渲染速度非常慢,在 DOM 中有 10 个图表。火狐冻结。怎么了?
- java - 在Java接口中验证默认方法中的条件