Firebase 在Flatter应用程序中获取空值(Firestore查询结果)
我有一个应用程序,在这里我通过电子邮件帐户查询获取用户详细信息。 我使用Future类获取数据并填充变量,但小部件文本始终显示空值。 如果我做错了什么,请告诉我Firebase 在Flatter应用程序中获取空值(Firestore查询结果),firebase,flutter,dart,google-cloud-firestore,flutter-widget,Firebase,Flutter,Dart,Google Cloud Firestore,Flutter Widget,我有一个应用程序,在这里我通过电子邮件帐户查询获取用户详细信息。 我使用Future类获取数据并填充变量,但小部件文本始终显示空值。 如果我做错了什么,请告诉我 class _HomePageAppState extends State<HomePageApp> { String _emailUsuario; Usuario usuario; void initState() { super.initState(); Autenticacao().getCurrentUser
class _HomePageAppState extends State<HomePageApp> {
String _emailUsuario;
Usuario usuario;
void initState() {
super.initState();
Autenticacao().getCurrentUser().then((user) {
setState(() {
if (user != null) {
_emailUsuario = user.email.toString(); //the user email is returnig correctly
recuperarDadosUsuarioFirebase().then((ds) {
usuario = Usuario(
email: _emailUsuario,
nome: ds['nome'] != null ? ds['nome'] : null,
);
});
}
});
});
}
Future<DocumentSnapshot> recuperarDadosUsuarioFirebase() async {
DocumentSnapshot ds;
await Firestore.instance
.collection('usuarios')
.document(_emailUsuario)
.get()
.then((DocumentSnapshot _ds) {
ds = _ds;
});
return ds;
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(),
body: Container(
color: Colors.white10,
child: ListView(
children: <Widget>[
Text('Bem vindo ${usuario.nome} !!!'),
],
),
),
);
}
}
class\u HomePageAppState扩展状态{
字符串_emailUsuario;
乌萨里奥·乌萨里奥;
void initState(){
super.initState();
Autenticacao().getCurrentUser().then((用户){
设置状态(){
如果(用户!=null){
_EmailUsario=user.email.toString();//用户电子邮件返回正确
RecurperarDadoSusuarioFirebase()。然后((ds){
乌萨里奥(
电子邮件:_emailUsuario,
nome:ds['nome']!=null?ds['nome']:null,
);
});
}
});
});
}
Future RecurperarDadoSuuarioFirebase()异步{
文件;
等待Firestore.instance
.collection(“usuarios”)
.文件(_emailUsuario)
.get()
.然后((文档快照){
ds=_ds;
});
返回ds;
}
@凌驾
小部件构建(构建上下文){
返回脚手架(
appBar:appBar(),
主体:容器(
颜色:颜色。白色,
子:ListView(
儿童:[
Text('Bem vindo${usuario.nome}!!!'),
],
),
),
);
}
}
U可能希望将Future Builder用于此类异步工作,因为在分配usuario
之前调用了生成方法,如下所示:
FutureBuilder(
future: getCurrentUser(),
builder: (context, AsyncSnapshot snapshot) {
if (snapshot.data == null) {
return Center(child: CircularProgressIndicator());
}
// after getting data
},
);
方法getCurrentUser()
需要创建:)