建筑资料页面,试图从Firestore中提取“名称”

时间:2019-08-25 03:03:03

标签: android firebase flutter google-cloud-firestore

我正在尝试构建一个配置文件页面,该页面从Firestore数据库中提取新用户的“名称”。目前,我遇到了一个错误(特别是rowCell行)。有没有人有任何想法或其他更好的方法来做到这一点? 谢谢!

尝试了替代功能来替换“ rowCell”行。

目前,Firestore中的值尚未提取到应用程序中。

class ProfileWidget extends StatelessWidget {

  final String userId;
  ProfileWidget (this.userId);
      @override
  Widget build(BuildContext context) {
    return StreamBuilder<DocumentSnapshot>(
      stream: Firestore.instance.collection('users').document(userId).snapshots(),
      builder: (context, snapshot) {
        User user = User.fromSnapshot(snapshot.data);
        return Row(
          children: <Widget>[
            rowCell(user.name, 'Name'),
        ],);

          },
    );}}

class User{
  final int name;
  final DocumentReference reference;

  User.fromMap(Map<String, dynamic> map, {this.reference})
      : name = map['name'];

  User.fromSnapshot(DocumentSnapshot snapshot)
      : this.fromMap(snapshot.data, reference: snapshot.reference);
}

3 个答案:

答案 0 :(得分:0)

我认为您没有从snapshot.data获得文档。为此,您必须使用snapshot.data.documentspost中的示例说明了如何做到这一点。

帖子中的代码示例:

return snapshot.data.documents
    .map((document) => new Text(document['some_field']).toList()
  

要访问文档中的字段,您可以使用document ['some_field']进行操作,如上所示。在这里,我们使用地图操作中的文档引用,然后使用字段名称作为访问器访问该文档中的一段数据。

希望这会有所帮助。

答案 1 :(得分:0)

在返回快照之前,您必须检查快照中是否有数据: if(snapshot.hasData){ User user = User.fromSnapshot(snapshot.data); return Row( children: <Widget>[ rowCell(user.name, 'Name'), ],); }

答案 2 :(得分:0)

发布错误会更好。

根据您的说法,错误是rowCell中,这意味着它无法构建窗口小部件(我想您没有提到该错误)

一些建议:
建议1

builder:(context, snapshot){
  if(snapshot.hasData){
    // Process the data and return the widget.
  }
  else{
    // IMPORTANT: You have to return a widget or will get error.
    // Return the widget that should be shown during processing like:
    return CircularProgressIndicator();
  }
}

建议2 :您确定User.nameint吗?通常是String

建议3 :如果您只需要提取一次数据并构建页面,但是如果您需要自动更新它,那么FutureBuilder会更有用,那么您使用的是正确的小部件。

如果没有帮助,请发布您的错误。
谢谢。