首页 > 解决方案 > Flutter Facebook 登录错误:找不到吸气剂:“成功”。案例 FacebookLoginStatus.Success

问题描述

我正在使用 Flutter 制作我的应用程序,我希望使用 Facebook 进行功能登录,这就是我所做的:

import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter_login_facebook/flutter_login_facebook.dart';

abstract class AuthBase {
  User get currentUser;

  Stream<User> authStateChanges();    

  Future<User> signInWithFacebook();

  Future<void> signOut();
}

class Auth implements AuthBase {
  final _firebaseAuth = FirebaseAuth.instance;

  @override
  Stream<User> authStateChanges() => _firebaseAuth.authStateChanges();

  @override
  User get currentUser => _firebaseAuth.currentUser;

  @override
  Future<User> signInWithFacebook() async {
    final fb = FacebookLogin();
    final response = await fb.logIn(permissions: [
      FacebookPermission.publicProfile,
      FacebookPermission.email,
    ]);
    switch (response.status) {
      case FacebookLoginStatus.Success:
        final accessToken = response.accessToken;
        final userCredential = await _firebaseAuth.signInWithCredential(
          FacebookAuthProvider.credential(accessToken.token),
        );
        return userCredential.user;
      case FacebookLoginStatus.Cancel:
        throw FirebaseAuthException(
          code: 'ERROR_ABORTED_BY_USER',
          message: 'Sign in aborted by user',
        );
      case FacebookLoginStatus.Error:
        throw FirebaseAuthException(
          code: 'ERROR_FACEBOOK_LOGIN_FAILED',
          message: response.error.developerMessage,
        );
      default:
        throw UnimplementedError();
    }
  }

  @override
  Future<void> signOut() async {
    final facebookLogin = FacebookLogin();
    await facebookLogin.logOut();
    await _firebaseAuth.signOut();
  }
}

这是我得到的错误:

Performing hot restart...
Syncing files to device AOSP on IA Emulator...
lib/services/auth.dart:68:32: Error: Getter not found: 'Success'.
      case FacebookLoginStatus.Success:
                               ^^^^^^^
lib/services/auth.dart:74:32: Error: Getter not found: 'Cancel'.
      case FacebookLoginStatus.Cancel:
                               ^^^^^^
lib/services/auth.dart:79:32: Error: Getter not found: 'Error'.
      case FacebookLoginStatus.Error:
                               ^^^^^
Restarted application in 278ms.

我尝试查看教程,但我发现我编写的代码没有任何区别,它在 Udemy 上,所以我无法将链接复制到这里给你。请告诉我如何处理,非常感谢,祝你有美好的一天

标签: flutterauthenticationdartmobilefacebook-login

解决方案


将代码更改为

import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter_login_facebook/flutter_login_facebook.dart';

abstract class AuthBase {
  User get currentUser;

  Stream<User> authStateChanges();    

  Future<User> signInWithFacebook();

  Future<void> signOut();
}

class Auth implements AuthBase {
  final _firebaseAuth = FirebaseAuth.instance;

  @override
  Stream<User> authStateChanges() => _firebaseAuth.authStateChanges();

  @override
  User get currentUser => _firebaseAuth.currentUser;

  @override
  Future<User> signInWithFacebook() async {
    final fb = FacebookLogin();
    final response = await fb.logIn(permissions: [
      FacebookPermission.publicProfile,
      FacebookPermission.email,
    ]);
    switch (response.status) {
      case FacebookLoginStatus.success:
        final accessToken = response.accessToken;
        final userCredential = await _firebaseAuth.signInWithCredential(
          FacebookAuthProvider.credential(accessToken.token),
        );
        return userCredential.user;
      case FacebookLoginStatus.cancel:
        throw FirebaseAuthException(
          code: 'ERROR_ABORTED_BY_USER',
          message: 'Sign in aborted by user',
        );
      case FacebookLoginStatus.error:
        throw FirebaseAuthException(
          code: 'ERROR_FACEBOOK_LOGIN_FAILED',
          message: response.error.developerMessage,
        );
      default:
        throw UnimplementedError();
    }
  }

  @override
  Future<void> signOut() async {
    final facebookLogin = FacebookLogin();
    await facebookLogin.logOut();
    await _firebaseAuth.signOut();
  }
}

小写这段代码:

case FacebookLoginStatus.Success:   to     case FacebookLoginStatus.success:
 case FacebookLoginStatus.Cancel:   to  case FacebookLoginStatus.cancel: 
 case FacebookLoginStatus.Error:   to  case FacebookLoginStatus.error:

推荐阅读