web-dev-qa-db-ja.com

FlutterのFirestore(cloud_firestoreプラグイン)から単一のドキュメントをクエリする

単一のドキュメントのみのデータをIDで取得したい。次のサンプルデータを使用した私のアプローチ:

TESTID1 {
     'name': 'example', 
     'data': 'sample data',
}

このようなものでした:

Firestore.instance.document('TESTID1').get() => then(function(document) {
    print(document('name'));
}

しかし、それは正しい構文ではないようです。

FirebaseのドキュメントはネイティブWEB、iOS、Androidなどのみを対象としており、Flutterを対象としていないため、flutter(Dart)内でfirestoreのクエリに関する詳細なドキュメントを見つけることができませんでした。 cloud_firestoreのドキュメントも短すぎます。私がやりたいことではないストリームに複数のドキュメントをクエリする方法を示す唯一の例があります。

不足しているドキュメントに関する関連問題: https://github.com/flutter/flutter/issues/14324

単一のドキュメントからデータを取得するのはそれほど難しくありません。

更新:

Firestore.instance.collection('COLLECTION').document('ID')
.get().then((DocumentSnapshot) =>
      print(DocumentSnapshot.data['key'].toString());
);

実行されません。

9
blandaadrian

しかし、それは正しい構文ではないようです。

collection()呼び出しがないため、正しい構文ではありません。 Firestore.instancedocument()を直接呼び出すことはできません。これを解決するには、次のようなものを使用する必要があります。

var document = await Firestore.instance.collection('COLLECTION_NAME').document('TESTID1');
document.get() => then(function(document) {
    print(document('name'));
}

またはより簡単な方法で:

var document = await Firestore.instance.document('COLLECTION_NAME/TESTID1');
document.get() => then(function(document) {
    print(document('name'));
}

リアルタイムでデータを取得する場合は、次のコードを使用してください。

Widget build(BuildContext context) {
  return new StreamBuilder(
      stream: Firestore.instance.collection('COLLECTION_NAME').document('TESTID1').snapshots(),
      builder: (context, snapshot) {
        if (!snapshot.hasData) {
          return new Text("Loading");
        }
        var userDocument = snapshot.data;
        return new Text(userDocument["name"]);
      }
  );
}

テキストビューに名前を設定するのにも役立ちます。

22
Alex Mamo