我正在尝试构建一个配置文件页面,该页面从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);
}
答案 0 :(得分:0)
我认为您没有从snapshot.data
获得文档。为此,您必须使用snapshot.data.documents
。 post中的示例说明了如何做到这一点。
帖子中的代码示例:
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.name
是int
吗?通常是String
。
建议3 :如果您只需要提取一次数据并构建页面,但是如果您需要自动更新它,那么FutureBuilder
会更有用,那么您使用的是正确的小部件。
如果没有帮助,请发布您的错误。
谢谢。