我想像这样在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;
}
}
如何将Reply对象添加到Cloud Firestore?
编辑:
为了澄清,我想创建一个数据类型为Object
的字段,其中包含以下字段:Reply Object Image
答案 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