首页 > 解决方案 > 如何从 Firebase 动态检索数据?

问题描述

颤振和火力基地的新手。我试图在流的帮助下从 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 中有数据,也会显示条件的 else 部分,即不显示任何数据。我不知道我哪里出错了。我试图检索的文档位于文件夹 User/uid/VaccineAdministered 中。

数据库:

标签: firebasefluttergoogle-cloud-firestore

解决方案


改变这个:

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

进入这个:

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

检索数据时需要参考文档


推荐阅读