Пользователь возвращает ноль до загрузки состояния инициализации - PullRequest
0 голосов
/ 03 октября 2019

После аутентификации пользователя они перенаправляются в файл Home.dart. В сборке Home есть функция нижней панели навигации, которая содержит страницы приложений.
В моем начальном состоянии init я вызываю функцию, которая загружает модель пользователя в переменную:

void initState() {
    super.initState();
    getUserData();
    pageController = PageController();
}

Таким образомЯ могу получить доступ к текущим пользовательским данным во всех приложениях без необходимости продолжать чтение в firebase, так как модель "User currentUser;" загружается при запуске приложения.

Однако на короткую секунду после входа в систему пользователь возвращает ноль, когда его перенаправляют на панель навигации, из-за задержки в firebase при вызове getUserData в моем состоянии инициализации.

Как я могу обновить мою начальную страницу (в этом случае feed.dart), как только будет загружена модель currentUser? Если я переключаюсь между экранами и обратно, чтобы кормить, все работает. Мне просто нужно обновить страницу, а не заставлять ее перезагрузить.

getUserData() async {
    //Loads uidPath with current user id.
    getCurrentUser();
    //Loads currentUser model with current user data.
    DocumentSnapshot doc = await usersRef.document(uidPath).get();
    doc = await usersRef.document(uidPath).get();
    currentUser = User.fromDocument(doc);
  }

Заранее спасибо!

Ответы [ 3 ]

0 голосов
/ 03 октября 2019

Вы можете изменить ожидающий вызов

getUserData() async {
    //Loads uidPath with current user id.
    getCurrentUser();
    //Loads currentUser model with current user data.
    DocumentSnapshot doc = await usersRef.document(uidPath).get();
    doc = usersRef.document(uidPath).get();
    currentUser = await User.fromDocument(doc);
  }
0 голосов
/ 04 октября 2019

Спасибо всем за ответы и предложения решений. Я закончил тем, что использовал пакет Провайдера. У меня были некоторые проблемы с этим, и поэтому мой код структурирован так, как я показал в этом вопросе. Но в целом, я думаю, что провайдер - лучшее решение для управления пользователями, подобные ошибки легко решаются. Для тех, кто сталкивается с этим в будущем, проверьте: https://pub.dev/packages/provider

0 голосов
/ 03 октября 2019

просто преобразуйте getuserdata () в асинхронную функцию, например:

getUserData() async {
return await //your code }

или

getUserData() async {
UserData = await //response from server
return UserData; }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...