使用Flutter将对象添加到Cloud Firestore

时间:2018-07-04 09:27:44

标签: firebase dart google-cloud-firestore flutter

我想像这样在Flutter应用程序中向Google Cloud Firestore添加对象:

Firestore image

我已经做了一个Reply课程:

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;
  }
}

如何将Reply对象添加到Cloud Firestore?

编辑: 为了澄清,我想创建一个数据类型为Object的字段,其中包含以下字段:Reply Object Image

4 个答案:

答案 0 :(得分:9)

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

然后将其的toJson方法添加到Firestore中(您不能插入/更新普通的Dart模型):

CollectionReference dbReplies = Firestore.instance.collection('replies');

Firestore.instance.runTransaction((Transaction tx) async {
  var _result = await dbReplies.add(_replyObj.toJson());
  ....

答案 1 :(得分:3)

空安全码:

说这是你的对象。

class MyObject {
  final String foo;
  final int bar;

  MyObject._({required this.foo, required this.bar});

  factory MyObject.fromJson(Map<String, dynamic> data) {
    return MyObject._(
      foo: data['foo'] as String,
      bar: data['bar'] as int,
    );
  }

  Map<String, dynamic> toMap() {
    return {
      'foo': foo,
      'bar': bar,
    };
  }
}

要将此对象添加到 Cloud Firestore,请执行以下操作:

MyObject myObject = MyObject.fromJson({'foo' : 'hi', bar: 0}); // Instance of MyObject.

var collection = FirebaseFirestore.instance.collection('collection');
collection
    .add(myObject.toMap()) // <-- Convert myObject to Map<String, dynamic>
    .then((_) => print('Added'))
    .catchError((error) => print('Add failed: $error'));

答案 2 :(得分:1)

@ Laksh22据我了解,您的意思是这样的:

Firestore.instance.runTransaction((transaction) async {
    await transaction.set(Firestore.instance.collection("your_collection").document(), {
        'reply' : {
        'replyName': replyName,
        'replyText': replyText,
        'replyVotes': replyVotes,
    }
});

就像上面的屏幕截图一样。

答案 3 :(得分:-1)

您可以像这样运行libraryCompiler事务:

libraryCompiler