firebase - 在 Flutter 应用中使用用户的谷歌账户头像
问题描述
美好的一天,我目前正在使用 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;
}
}
感谢您的任何帮助。
解决方案
如果页面上有一个刚刚更新的变量,在里面调用它setState()
可能会解决问题。您需要Image.network()
在登录后检查是否收到了预期的用户照片 URL,因为该图像在应用程序恢复中按预期工作。您提供的代码并未展示照片 URL 是如何被访问并显示在着陆页上的。
推荐阅读
- typescript - 将 TypeScript 声明从本地私有模块导入应用程序
- android - 具有相同高度的子视图,具有最大高度的视图
- vba - Outlook宏即使在删除时也会执行
- algorithm - 递归:T(n/4) + T(n/2) + n^2 使用树方法
- java - Jsoup.body() 返回空正文
- javascript - 如何使用 forEach-Loop 将数组的内容转为另一个数组?
- powershell - 导出然后导入自定义的 WMI 命名空间
- android - 覆盖整个活动的底部导航视图
- java - java.jdbc clojure 执行!插入数量
- nuget - 我可以控制工件中_local_ repos 的顺序吗?