使用Flutter将对象添加到Cloud Firestore

Lak*_*h22 7 dart firebase flutter google-cloud-firestore

我想在Flutter应用中向Google Cloud Firestore添加对象,如下所示:

消防站图像

我已经做了一个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;
  }
}
Run Code Online (Sandbox Code Playgroud)

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

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

bla*_*eil 11

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

}
Run Code Online (Sandbox Code Playgroud)

并将要成为对象的字段键入Map。然后,在要插入到数据库的页面上,导入dbSchema.dart并创建一个新模型:

Replies _replyObj = new Replies(
  title: _topic,
  coordinates: _coordinates,
);
Run Code Online (Sandbox Code Playgroud)

这假定您已在此之前定义了本地_coordinates(或其他)对象,例如:

_coordinates = {
 'lat': '40.0000',
 'lng': '110.000', 
};
Run Code Online (Sandbox Code Playgroud)

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

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

Firestore.instance.runTransaction((Transaction tx) async {
  var _result = await dbReplies.add(_replyObj.toJson());
  ....
Run Code Online (Sandbox Code Playgroud)

  • 很好的答案。添加一些有关将 Firestore 读取文档转换回 Dart 模型的详细信息可能会提供额外的帮助。 (2认同)

Cop*_*oad 5

空安全代码:

说这是你的对象。

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,
    };
  }
}
Run Code Online (Sandbox Code Playgroud)

要将此对象添加到云 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'));
Run Code Online (Sandbox Code Playgroud)