我想在我的Ffltter应用程序中向Google Cloud Firestore添加一个对象,如下所示:

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?

Edit: 为了清楚起见,我想创建一个数据类型为Object的字段,其中包含字段:Reply Object Image

推荐答案

首先,我强烈建议您有一个定义所有模式和/或模型的文件,这样您的数据库 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
}

Dart相关问答推荐

为什么我们在dart 里有工具?

Dart 列表中的 addAll() 和 followBy() 有什么区别?

Const 构造函数不适用于 Dart 并显示 id 为 0

Flutter - 对 Cloud Firestore 进行排序

Flutter tabview刷新问题

Flutter - 为什么滑块不会在 AlertDialog 中更新?

Flutter-在屏幕上绘制图形

如何在 Flutter 中管理 Firebase 身份验证状态?

Flatter Container()与SizedBox()的虚拟空容器

Flutter/Dart Uri 没有在 URL 中转义冒号:

无法使用 Flutter 调用 Localhost,将随机端口分配给 HTTP GET 调用

如何将条目添加到列表中的特定索引?

何时使用polymer点击或点击?

Dart 是否有断点语句?

从 Dart 调用 javascript

安装 dart-sdk 后找不到 pub 命令

Dart:Iterable 与 List,总是使用 Iterable?

我应该更喜欢迭代 Map.entries 还是 Map.values?

使用 Dart 将 Uint8List 转换为字符串

如何使用 Dart 将字符串解析为数字?