Запрос одного документа из Firestore во Flutter (плагин cloud_firestore) - PullRequest
0 голосов
/ 28 ноября 2018

Я хочу получить данные только одного документа через его идентификатор.Мой подход с примерами данных:

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

был примерно таким:

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

, но это не похоже на правильный синтаксис.

Я не смог найти подробную документацию по запросам в firestore в пределах флаттера (дротика), поскольку документация по firebase касается только Native WEB, iOS, Android и т. д., но не Flutter.Документация к cloud_firestore также слишком коротка.Есть только один пример, который показывает, как запросить несколько документов в потоке, а это не то, что я хочу сделать.

Проблема, связанная с отсутствующей документацией: https://github.com/flutter/flutter/issues/14324

Не может бытьэто трудно получить данные из одного документа.

ОБНОВЛЕНИЕ:

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

не выполняется.

1 Ответ

0 голосов
/ 28 ноября 2018

, но это неверный синтаксис.

Это неправильный синтаксис, поскольку вы пропускаете вызов collection().Вы не можете позвонить document() прямо на ваш Firestore.instance.Чтобы решить эту проблему, вы должны использовать что-то вроде этого:

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"]);
      }
  );
}

Это также поможет вам установить имя для текстового представления.

...