【发布时间】:2020-05-07 09:49:10
【问题描述】:
您好,我目前正在使用 firebase/flutter 创建一个应用程序,用户可以在其中登录以进入下一页。我的登录和firebase都处于正常工作状态,但我遇到的一个问题是能够在初始登录时访问用户的个人资料图片。附加的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');
}
},
登录.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;
}
}
感谢您的所有帮助。
【问题讨论】:
-
你在使用provider包吗?
-
我不是。我现在已经通读了,但不明白这有什么帮助?
-
stackoverflow.com/a/56218510/4712391 如果您想使用提供程序包,这可能会有所帮助。这用于跟踪用户对象,如果它发生变化,您的个人资料图片也会发生变化
标签: firebase flutter firebase-authentication