Добрый день, в настоящее время я использую firebase / flutter для создания приложения, в котором пользователи могут войти, чтобы перейти на следующую страницу. Мой вход в систему и firebase все в рабочем состоянии, но у меня проблема в том, что я могу получить доступ к картинке профиля пользователя при первом входе в систему. Прикрепленный gif-файл показывает это лучше, чем я могу объяснить, но в основном, когда я вхожу в систему. в первый раз пользовательского изображения там нет, но если я выйду и go вернусь (пользователь все еще вошел в систему), то изображение будет загружено:
![enter image description here](https://i.stack.imgur.com/jZPjZ.gif)
Проблема: Изображение профиля пользователя не загружается при первом входе в систему и отображается только при выходе и повторном входе, когда все еще вошли в систему.
Предположение: У данных пользователя недостаточно времени для загрузки к моменту окончания загрузки моих данных. ИЛИ: Я неправильно вызываю данные при первоначальном входе в систему.
На что я нацеливаюсь: Загрузите данные пользователя (фото / имя / адрес электронной почты) при нажатии на логин и до полной загрузки следующей страницы.
Код: Кнопка входа:
Widget _signInButton() {
return OutlineButton(
splashColor: Colors.grey,
onPressed: () async {
try {
final result = await InternetAddress.lookup('google.com');
if (result.isNotEmpty && result[0].rawAddress.isNotEmpty) {
print('connected');
bool result = await signInWithGoogle(); //assumed issue
if (result) {
Navigator.pushNamed(context, '/specials-page');
fireBaseAnalyticsDataObject.onLogin(result);
}
else
print("error logging in");
}
} on SocketException catch (_) {
noInternetAlertDialog(context);
print('not connected');
}
},
sign.dart.dart :
final FirebaseAuth _auth = FirebaseAuth.instance;
final GoogleSignIn googleSignIn = new GoogleSignIn();
final MyTabsState tabPageObject = new MyTabsState();
Future<bool> signInWithGoogle() async {
try{
final GoogleSignInAccount googleSignInAccount = await googleSignIn.signIn();
final GoogleSignInAuthentication googleSignInAuthentication =
await googleSignInAccount.authentication;
final AuthCredential credential = GoogleAuthProvider.getCredential(
accessToken: googleSignInAuthentication.accessToken,
idToken: googleSignInAuthentication.idToken,
);
final AuthResult authResult = await _auth.signInWithCredential(credential);
final FirebaseUser user = authResult.user;
MyTabs(
userDisplayName: user.displayName,
userPhotoUrl: user.photoUrl,
userEmail: user.email,
);
globalData.user = user; //this accesses .uid / .displayName / .email / .photoUrl
assert(!user.isAnonymous);
assert(await user.getIdToken() != null);
final FirebaseUser currentUser = await _auth.currentUser();
assert(user.uid == currentUser.uid);
return true;
} catch (error) {
return false;
}
}
Спасибо за любую помощь.