【问题标题】:How do I dynamically retrieve data from Firebase?如何从 Firebase 动态检索数据?
【发布时间】:2020-03-09 14:27:54
【问题描述】:

flutter 和 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 文件夹中。

数据库:

【问题讨论】:

  • 添加你的firestore的截图
  • @peter 已上传! imgur.com/qXz0Zps
  • inside_userDataFromSnapshot 打印(snapshot.data) 并检查你得到了什么

标签: firebase flutter google-cloud-firestore


【解决方案1】:

改变这个:

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

进入这个:

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

检索数据时需要参考文档

【讨论】:

  • 感谢您的回复,但它是否只返回该特定文档?我想检索“疫苗管理”文件夹中的所有文档!
  • 你可以试试return vaccTaken.document(uid).collection('Vaccine Administered').snapshots(),还有印刷品给了你什么?
  • return vaccTaken.document(uid).collection('Vaccine Administered').snapshots() 给我一个错误lib/services/database.dart:39:12: Error: The argument type 'UserDataFunction(DocumentSnapshot)' can't be assigned to the parameter type 'UserData Function(QuerySnapshot)'. 并且 print(snapshot.data) 返回 null!
  • 这是代码以防万一github.com/arpit-d/hospital_app 检索代码在 services/database.dart 中,显示代码在 screen/home/vacc_reminder.dart 中
  • 我不确定你为什么会收到这个错误,你需要检查你的代码。但是在文档中它说您可以在 collections() pub.dev/packages/cloud_firestore 上调用 snapahots()
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-14
  • 2016-11-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多