web-dev-qa-db-ja.com

Flutterを使用してCloud Firestoreにオブジェクトを追加する

次のように、FlutterアプリでGoogle Cloud Firestoreにオブジェクトを追加します。

Firestore image

すでに返信クラスを作成しました:

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

7
Laksh22

最初に、すべてのスキーマまたはモデル、あるいはその両方を定義する単一のファイルを作成して、db構造の単一の参照ポイントを作成することを強くお勧めします。 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型にします。次に、dbに挿入するページで、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());
  ....
11
blaneyneil

次のようなFirestoreトランザクションを実行できます。

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

@ Laksh22私が理解している限り、あなたは次のようなものを意味します:

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

上記のスクリーンショットのように。