Я использую FutureBuilder с аутентификацией Firebase. я ожидаю, что флаттер проверит внутри FutureBuilder на статус входа пользователя. если пользователь вошел в виджет для отображения должен быть значок logout
. если пользователь вышел из системы, то отображаемый виджет должен иметь вид login
Моя функция для Future выглядит следующим образом:
Future<String> setUserStatus()
async {
userStatus = await FirebaseAuth.instance.currentUser();
uid = userStatus.uid;
print('after the query - The user is $uid after');
if(uid == null){
return uid = null;
} else if( uid != null){
return uid = userStatus.uid;
}
}
My Future Builder выглядит следующим образом:
FutureBuilder<String>(
future: future_user,
builder: (BuildContext context, snapshot) {
String update_status = snapshot.data;
if(update_status == null){
return //Widget for login
}
else if(update_status != null){
return //widget for logout
}
Это прекрасно работает, если я нажимаю кнопку выхода из системы. Виджет обновляется правильно и дает пользователю возможность войти в систему. Функция для выхода из системы:
Future<String> logout() async {
await FirebaseAuth.instance.signOut();
setState(() {
future_user = setUserStatus();
});
}
Проблема заключается в том, что при входе в систему пользователь попадает на отдельную страницу входа. После входа в систему, когда я возвращаюсь на главную страницу, где работает FutureBuider, он не получает uid пользователя (возвращает ноль) и по-прежнему показывает значок login
. я вызываю Future Builder внутри initState, поэтому он не должен запускаться при переходе назад?
Future<String> future_user;
@override
void initState() {
super.initState();
setState(() {
future_user = setUserStatus();
});
}
при повторном запуске приложения из Android Studio оно корректно обновляет виджет.