【问题标题】:Getting null value (Firestore query result) in Flutter app在 Flutter 应用程序中获取空值(Firestore 查询结果)
【发布时间】:2020-06-18 08:16:39
【问题描述】:

我有一个应用程序,在此我正在查询通过电子邮件帐户获取用户详细信息。 我正在使用 Future 类来获取数据并填充我的变量,但小部件 Text 始终显示空值。 如果我做错了什么,请让我现在。

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} !!!'),
   ],
 ),
 ),
 );
  }
}

【问题讨论】:

    标签: firebase flutter dart google-cloud-firestore flutter-widget


    【解决方案1】:

    你可能想使用 Future Builder 进行这种异步工作,因为在分配 usuario 之前调用了 build 方法,如下所示:

    FutureBuilder(
      future: getCurrentUser(),
      builder: (context, AsyncSnapshot snapshot) {
        if (snapshot.data == null) {
          return Center(child: CircularProgressIndicator());
        }
        // after getting data
      },
    );
    

    需要创建方法getCurrentUser() :)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多