如何从Firebase动态检索数据?

时间:2020-03-09 14:27:54

标签: firebase flutter google-cloud-firestore

扑扑和火力堡垒新手。我正在尝试借助流从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')
        );
        }
      }
    );
  }
}

即使firebase中有数据,条件的其他部分也会显示,即没有数据显示。我不知道我要去哪里错了。 我试图检索的文档位于用户/ uid / VaccineAdministered文件夹中。

数据库:

1 个答案:

答案 0 :(得分:0)

更改此:

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

对此:

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

检索数据时需要参考文档