在Flutter应用中使用用户的Google帐户个人资料图片

时间:2020-01-21 10:44:25

标签: firebase flutter firebase-authentication

早上好,我目前正在使用Firebase / flutter创建一个应用程序,用户可以在其中登录以进入下一页。我的登录名和firebase都工作正常,但是我遇到的一个问题是在初次登录时可以访问用户的个人资料图片。随附的gif显示得比我能解释的要好,但是基本上我登录时第一次,用户图像不存在,但是如果我退出并返回(用户仍然登录),则会加载图片:

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');
        }
      },

登录.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;
  }
}

谢谢您的帮助。

1 个答案:

答案 0 :(得分:0)

例如,使用NetworkImage Widget并将photoUrl转换为字符串,

CircleAvatar(
radius: 10,
child: Image(
 image: NetworkImage(user.photoUrl.toString()),
)

现在您应该能够查看个人资料图片。