Firebase_auth photoURL不起作用返回默认人物图片

问题描述

颤动1.20.4; Flutter_login_facebook:^ 0.2.1; firebase_auth:^ 0.18.1; firebase_core:^ 0.5.0; 提供者:^ 4.3.2;

显示名称和电子邮件有效,但是photoURL返回以下内容: 我试图在不同的设备上构建它,并尝试登录到不同的Facebook帐户。 https://graph.facebook.com/1757577617747458/picture

我的主屏幕

class _HomeState extends State<Home> {
  StreamSubscription<User> homeStateSubscription;

  @override
  void initState() {
    var authBloc = Provider.of<AuthBloc>(context,listen: false);
    homeStateSubscription = authBloc.currentUser.listen((fbUser) {
      if (fbUser == null) {
        Navigator.of(context)
            .pushReplacement(MaterialPageRoute(builder: (context) => Login()));
      }
    });
    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    var authBloc = Provider.of<AuthBloc>(context);
    return Scaffold(
        body: Center(
      child: StreamBuilder<User>(
          stream: authBloc.currentUser,builder: (context,snapshot) {
            if (!snapshot.hasData) return CircularProgressIndicator();
            print(snapshot.data.email);

            return Column(
              mainAxisAlignment: MainAxisAlignment.center,children: <Widget>[
                Text(snapshot.data.displayName,style: TextStyle(fontSize: 35.0)),SizedBox(
                  height: 20.0,),CircleAvatar(
                  backgroundImage: NetworkImage(
                      snapshot.data.photoURL + '?width=500&height500'),radius: 60.0,SizedBox(
                  height: 100.0,SignInButton(Buttons.Facebook,text: 'Sign out of Facebook',onpressed: () => authBloc.logout())
              ],);
          }),));
  }
}

这是集团

class AuthBloc {
  final authService = AuthService();
  final fb = FacebookLogin();

  Stream<User> get currentUser => authService.currentUser;

  loginFacebook() async {

    final res = await fb.logIn(permissions: [
      FacebookPermission.publicProfile,FacebookPermission.email
    ]);

    switch (res.status) {
      case FacebookLoginStatus.Success:
        print('It worked');

        //Get Token
        final FacebookAccesstoken fbToken = res.accesstoken;

        //Convert to Auth Credential
        final AuthCredential credential =
            FacebookAuthProvider.credential(fbToken.token);

        //User Credential to Sign in with Firebase
        final result = await authService.signInWithCredentail(credential);

        print('${result.user.displayName} is Now logged in');

        break;
      case FacebookLoginStatus.Cancel:
        print('The user canceled the login');
        break;
      case FacebookLoginStatus.Error:
        print('There was an error');
        break;
    }
  }

  logout() {
    authService.logout();
  }
}

我的身份验证服务

class AuthService {
  final _auth = FirebaseAuth.instance;
  Stream<User> get currentUser => _auth.authStateChanges();
  Future<UserCredential> signInWithCredentail(AuthCredential credential) =>
      _auth.signInWithCredential(credential);
  Future<void> logout() => _auth.signOut();
}

解决方法

我有同样的问题。似乎FB改变了获取个人资料图片的方式。

来源:https://developers.facebook.com/docs/graph-api/reference/user/picture/

“在开发模式下,对ASID进行无令牌请求的应用将收到轮廓图像作为响应。”

使用Facebook登录后使用令牌可用于从图形API检索图像。问题是我需要下载图像并显示在配置文件小部件中。