Использование изображения профиля пользователя Google в приложении Flutter - PullRequest
0 голосов
/ 21 января 2020

Добрый день, в настоящее время я использую firebase / flutter для создания приложения, в котором пользователи могут войти, чтобы перейти на следующую страницу. Мой вход в систему и firebase все в рабочем состоянии, но у меня проблема в том, что я могу получить доступ к картинке профиля пользователя при первом входе в систему. Прикрепленный gif-файл показывает это лучше, чем я могу объяснить, но в основном, когда я вхожу в систему. в первый раз пользовательского изображения там нет, но если я выйду и go вернусь (пользователь все еще вошел в систему), то изображение будет загружено:

enter image description here

Проблема: Изображение профиля пользователя не загружается при первом входе в систему и отображается только при выходе и повторном входе, когда все еще вошли в систему.

Предположение: У данных пользователя недостаточно времени для загрузки к моменту окончания загрузки моих данных. ИЛИ: Я неправильно вызываю данные при первоначальном входе в систему.

На что я нацеливаюсь: Загрузите данные пользователя (фото / имя / адрес электронной почты) при нажатии на логин и до полной загрузки следующей страницы.

Код: Кнопка входа:

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;
  }
}

Спасибо за любую помощь.

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