我有个人资料屏幕。并从云存储中获取数据并显示在配置文件屏幕中。
我猜检索数据没有问题,但问题出在显示时。我不知道怎么搞 现在错误仅显示“正在加载”文本。 帮帮我
class Profile extends StatefulWidget {
@override
_ProfileState createState() => _ProfileState();
}
class _ProfileState extends State<Profile> {
bool userFlag = false;
var users;
@override
void initState() {
// TODO: implement initState
super.initState();
UserManagement().getData().then((QuerySnapshot docs){
userFlag = true;
users = docs.documents[0].data;
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Profile'),
),
body: Container(
padding: EdgeInsets.all(50),
child: Column(
children:<Widget>[
name(),
],
),
),
);
}
Widget name() {
return Container(
child: Row(
mainAxisAlignment: MainAxisAlignment.start,
children: <Widget>[
Text(
"Name",
style: TextStyle(fontWeight: FontWeight.w600,fontSize: 18),
),
SizedBox(
width: 45,
),
userFlag ? Text(users['Name'],
style: TextStyle(fontWeight: FontWeight.w400,fontSize: 18),
)
:Text('Loading'),
],
),
);
}
为了获取我拥有的数据
getData(){
return Firestore.instance
.collection('users').getDocuments();
}
答案 0 :(得分:1)
我以这种方式获取和使用数据:
QuerySnapshot Users = await _fs
.collection("users")
.getDocuments();
它将为您提供用户集中的所有用户。 因此,为了特定地检索一个用户,我使用“ for循环”。
String myEmail = "email@gmail.com";
String username;
for (var user in users.documents) {
if ( myEmail == user.data["email"]){
// you have all the field for the user using "myEmail".
username = user.data["username"];
} else {
print("There is no User with this email");
}
}
但是我认为可能会有更好的方法。
答案 1 :(得分:0)
此错误是因为,您应该像这样初始化用户变量
var users = {};
代替
var user;