Вам не нужно ждать сборки, вам нужно что-то построить, чтобы показать пользователю, что приложение что-то загружает (или пустой экран), а затем перестроить после завершения функции.
У вас может быть переменная Widget, которая устанавливается по умолчанию при создании виджета, скажем, с помощью CircularProgressIndicator
, а затем изменить его с помощью setState, что-то вроде этого:
class YourWidgetState extends State<YourWidget> {
Widget _body = CircularProgressIndicator(); // Default Body
@override
void initState(){
_gotoHomeScreen();
}
@override
Widget build(BuildContext context){
return _body;
}
Widget _gotoHomeScreen() {
AuthService.getuserPrefEmail().then((email){
AuthService.email = email;
if (email == null) {
setState(() => _body = LoginScreen());
} else {
AuthService.uid = email;
setState(() => _body = HomeMenuScreen());
}
});
}
}
Другой способ состоит в том, чтобы использовать переменную для информирования вас о ситуации загрузки, например bool finishedLoading
, и вызывать setState
, чтобы изменить значение, когда это будет сделано, используя переменную email
, которую вы установили, чтобы знать, когдапользователь вошел в систему и выполняет условную сборку, например:
bool loading = true;
@override
Widget build(BuildContext context){
if(loading) return CircularProgressIndicator();
if(AuthService.email == null)
return LoginScreen();
else
return HomeMenuScreen();
}
Widget _gotoHomeScreen() {
AuthService.getuserPrefEmail().then((email){
AuthService.email = email;
if (email != null) {
AuthService.uid = email;
}
setState((){ loading = false; });
});
}