首页 > 解决方案 > 使用 Flutter 向 Cloud Firestore 添加对象

问题描述

我想在我的 Flutter 应用程序中向 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?

编辑: 为了澄清,我想创建一个数据类型的字段,Object其中包含字段:回复对象图像

标签: firebasedartgoogle-cloud-firestoreflutter

解决方案


首先,我强烈建议您使用一个文件来定义您的所有模式和/或模型,以便您的数据库结构有一个单一的参考点。像一些名为 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
}

推荐阅读