Flutter Facebook 登录允许切换帐户

Xia*_* Wu 5 facebook-login dart flutter

该应用程序允许用户使用 Facebook 登录,但当用户想要使用不同的 Facebook 帐户登录时,我遇到了麻烦,此页面只会显示继续按钮。有没有办法让用户选择使用不同的帐户登录?另外,在 FacebookLoginStatus.error 的情况下,我确实没有看到任何错误,应该对其进行哪些错误处理?我是颤振和编码的新手,指出是否应该以不同的方式做任何事情或可以改进什么将会很有帮助。

onPressed: () async {
        final facebookLogin = FacebookLogin();
        final result = await facebookLogin.logIn(['email']);

        switch (result.status) {
          case FacebookLoginStatus.loggedIn:
           try{
             final token = result.accessToken.token;
             AuthCredential credential =
             FacebookAuthProvider.getCredential(accessToken: token);

             FirebaseUser user = (await _auth.signInWithCredential(credential)).user;

             if(user != null){
               Navigator.pushReplacementNamed(context, Home.id);
             }

           } catch(e){
             print(e);
           }
            break;
          case FacebookLoginStatus.cancelledByUser:
            print('cancelled');
            break;
          case FacebookLoginStatus.error:
            print('error');
            break;
        }
      },
Run Code Online (Sandbox Code Playgroud)

小智 1

当用户想要使用不同的 Facebook 帐户登录时遇到问题,此页面只会显示继续按钮

我使用FacebookLogin.logOut()断开用户连接,以便用户可以使用不同的帐户登录。

onPressed: () async {

      final facebookLogin = FacebookLogin();

      await facebookLogin.logOut(); // disconnect user

      final FacebookLoginResult result =
          await facebookLogin.logIn(['email', 'public_profile']);

        switch (result.status) {
          case FacebookLoginStatus.loggedIn:
           try{
             final token = result.accessToken.token;
             AuthCredential credential =
             FacebookAuthProvider.getCredential(accessToken: token);

             FirebaseUser user = (await _auth.signInWithCredential(credential)).user;

             if(user != null){
               Navigator.pushReplacementNamed(context, Home.id);
             }

           } catch(e){
             print(e);
           }
            break;
          case FacebookLoginStatus.cancelledByUser:
            alertMessage(context, 'cancelled'); // show dialog
            break;
          case FacebookLoginStatus.error:
            alertMessage(context, 'error'); // show dialog
            break;
        }
      },
Run Code Online (Sandbox Code Playgroud)

应该对其进行哪些错误处理?

您可以提示用户登录状态消息:

void alertMessage(context, String message) {
    showDialog(
      context: context,
      builder: (context) => AlertDialog(
        title: const Text("Error"),
        content: Text(message),
        actions: [
          FlatButton(
            child: Text(S.of(context).ok),
            onPressed: () {
              Navigator.of(context).pop();
            },
          )
        ],
      )
    );
  }
Run Code Online (Sandbox Code Playgroud)