Получение нулевого значения (результат запроса Firestore) в приложении Flutter - PullRequest
0 голосов
/ 05 марта 2020

У меня есть приложение, и в этом я делаю запрос для получения информации о пользователе по учетной записи электронной почты. Я использую класс 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} !!!'),
   ],
 ),
 ),
 );
  }
}

1 Ответ

0 голосов
/ 05 марта 2020

U, возможно, захочет использовать Future Builder для таких асинхронных операций c, потому что метод построения работы был вызван до назначения usuario, так что:

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

Необходимо создать метод getCurrentUser(): )

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...