如何通过facebook解决登录问题?

时间:2019-04-25 20:19:11

标签: facebook dart flutter firebase-authentication

我提出了一个申请,您可以使用Facebook登录。

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => new _MyAppState();
}

class _MyAppState extends State<MyApp> {
  static final FacebookLogin facebookSignIn = new FacebookLogin();

  final FirebaseAuth _fAuth = FirebaseAuth.instance;

  Future<FirebaseUser> _signIn(BuildContext context) async {
    Scaffold.of(context).showSnackBar(new SnackBar(
          content: new Text('Sign in button clicked'),
        ));

    final FacebookLoginResult result =
        await facebookSignIn.logInWithReadPermissions(['email']);

    FirebaseUser user =
        await _fAuth.signInWithFacebook(accessToken: result.accessToken.token);

    ProviderDetails userInfo = new ProviderDetails(
        user.providerId, user.uid, user.displayName, user.photoUrl, user.email);

    List<ProviderDetails> providerData = new List<ProviderDetails>();
    providerData.add(userInfo);

    UserInfoDetails userInfoDetails = new UserInfoDetails(
        user.providerId,
        user.uid,
        user.displayName,
        user.photoUrl,
        user.email,
        user.isAnonymous,
        user.isEmailVerified,
        providerData);

    Navigator.push(
      context,
      new MaterialPageRoute(
        builder: (context) => new DetailedScreen(detailsUser: userInfoDetails),
      ),
    );

    return user;
  }

  Future<Null> _signOut(BuildContext context) async {
    await facebookSignIn.logOut();
    Scaffold.of(context).showSnackBar(new SnackBar(
          content: new Text('Sign out button clicked'),
        ));
    print('Signed out');
  }

  @override
  Widget build(BuildContext context) {
    return new MaterialApp(
      home: new Scaffold(
        appBar: new AppBar(
          title: new Text('Fb Sign In with Firebase'),
        ),
        body: new Builder(
          builder: (BuildContext context) {
            return new Center(
              child: new Column(
                mainAxisAlignment: MainAxisAlignment.center,
                children: <Widget>[
                  new MaterialButton(
                    //padding: new EdgeInsets.all(16.0),
                    minWidth: 150.0,
                    onPressed: () => _signIn(context)
                        .then((FirebaseUser user) => print(user))
                        .catchError((e) => print(e)),
                    child: new Text('Sign in with Facebook'),
                    color: Colors.lightBlueAccent,
                  ),
                ],
              ),
            );
          },
        ),
      ),
    );
  }
}

class UserInfoDetails {
  UserInfoDetails(this.providerId, this.uid, this.displayName, this.photoUrl,
      this.email, this.isAnonymous, this.isEmailVerified, this.providerData);
  final String providerId;

  final String uid;

  final String displayName;

  final String photoUrl;

  final String email;

  final bool isAnonymous;

  final bool isEmailVerified;

  final List<ProviderDetails> providerData;
}

class ProviderDetails {
  final String providerId;

  final String uid;

  final String displayName;

  final String photoUrl;

  final String email;

  ProviderDetails(
      this.providerId, this.uid, this.displayName, this.photoUrl, this.email);}

但是在按下按钮后,会显示来自Facebook白色文本的警报对话框 您的程序将有权访问名称,电子邮件和其他公共信息。按钮继续显示为...按下此按钮后,什么也没发生,并写入控制台

I/flutter (17586): NoSuchMethodError: The getter 'token' was called on null.
I/flutter (17586): Receiver: null
I/flutter (17586): Tried calling: token
I/FirebaseAuth(17586): [FirebaseAuth:] Loading module via FirebaseOptions.
I/FirebaseAuth(17586): [FirebaseAuth:] Preparing to create service connection to gms implementation

我使用此命令来获取saha:

keytool -importkeystore -srckeystore C: \ Users \ admin \ .android \ debug.keystore -destkeystore C: \ Users \ admin \ .android \ debug.keystore -deststoretypetype PKCS12" .

非常感谢您的协助。

1 个答案:

答案 0 :(得分:2)

这对我有用:

Future<User> signInWithFacebook() async {
    final facebookLogin = FacebookLogin();
    facebookLogin.loginBehavior = FacebookLoginBehavior.webViewOnly;
    final result = await facebookLogin.logIn(['email', 'public_profile']);
}

我正在使用 flutter_facebook_login:^ 3.0.0

相关问题