Как мне динамически получать данные из Firebase? - PullRequest
0 голосов
/ 09 марта 2020

Новое в трепетании и пожаре. Я пытаюсь получить пользовательские данные из Firebase с помощью потока, а затем пытаюсь отобразить их для пользователя в виджете Stream Builder. Это код для извлечения

class DatabaseService {
  final String uid;
  DatabaseService({this.uid});

  CollectionReference vaccTaken = Firestore.instance.collection('User');



  Stream<UserData> get userData {
    return vaccTaken.document(uid).collection('Vaccine Administered').document().snapshots()
      .map(_userDataFromSnapshot);
  }
UserData _userDataFromSnapshot(DocumentSnapshot snapshot) {
    return UserData(
      uid: uid,
      name: snapshot.data['name'],
      vaccineName: snapshot.data['vaccine given'],
    );
  }

и это для отображения извлеченных данных

class _VaccBodyState extends State<VaccBody> {

  @override
  Widget build(BuildContext context) {
    final user = Provider.of<User>(context);
    return StreamBuilder(
      stream: DatabaseService(uid: user.uid).userData,
      builder: (context,snapshot) {
        if(snapshot.hasData){
          return Container(
          child: Column(
            children: <Widget>[
              Expanded(child: ListView.builder(
                itemCount: snapshot.data.length,
                itemBuilder: (BuildContext ctxt, int index){
                  return new Text(snapshot.data[index]);
                }
              ))
            ],
          )
        );
        }else{
        return Container(
          child: Text('No data')
        );
        }
      }
    );
  }
}

Даже если в базе данных есть данные, отображается другая часть условия, т.е. показывается. Я понятия не имею, где я иду не так. Документы, которые я пытаюсь получить, находятся в папке User / uid / VaccineAdministered.

База данных:

1 Ответ

0 голосов
/ 09 марта 2020

Измените это:

return vaccTaken.document(uid).collection('Vaccine Administered').document().snapshots()

на это:

return vaccTaken.document(uid).collection('Vaccine Administered').snapshots()

При получении данных необходимо ссылаться на документ

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...