Использование Stream Building с конкретным документом Firestore - PullRequest
0 голосов
/ 11 июня 2018

Я создаю приложение Flutter, и у меня возникают проблемы с пониманием того, как реализовать Firestore.Из учебных пособий, которые я видел, я только вижу, как создать снимок всей коллекции, однако в моем случае моя коллекция - это пользователи, поэтому мне нужно только сделать снимок документа конкретного пользователя.Похоже, что в документации Firebase нет документации о том, как это сделать, и нет много документации на странице FlutterFire GitHub.Пожалуйста, помогите!

Это виджет, который я пытаюсь построить с помощью StreamBuilder.

  @override
  Widget build(BuildContext context) {
    return new StreamBuilder(
      stream: Firestore.instance.collection('users').document(userId).snapshots(),
      builder: (context, snapshot) {
        return new ListView.builder(
          itemCount: //what do I put here?,
          itemBuilder: (context, index) => new Item(//And here?),
        );
      }
    );
  }

1 Ответ

0 голосов
/ 11 июня 2018

Допустим, вы хотите создать Text с параметром name из вашего документа

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

Это всего лишь один экземпляр.Создание StreamBuilder в документе будет перестраиваться каждый раз при изменении самого документа.Вы можете попробовать этот код, а затем перейти к вашей консоли и изменить значение «имя».Ваше приложение будет автоматически отражать изменения.

Вместо одного Text, вы можете построить целое дерево, которое использует данные из вашего потока.

Если вы хотите получить в данный момент значениедокумента, вы можете сделать это, разрешив метод Future из get() в ссылке на документ.

var document = await Firestore.instance.collection('users').document(userId).get(),
...