未为类“FirebaseAuth”2 定义方法“signInWithGoogle”

时间:2021-03-30 20:04:58

标签: firebase flutter firebase-authentication google-signin

我正在尝试学习如何让 Flutter 应用程序登录 Firebase 身份验证。我使用 android studio 插件创建了一个新的 flutter 项目并添加了依赖项。尝试调用该方法时,出现错误“未为类 'FirebaseAuth' 定义方法 'signInWithGoogle'”。有人可以告诉我解决方案吗,我是颤振的初学者,希望得到任何帮助。

    //THIS IS LOGIN.DART
    
    class Login extends StatefulWidget {
      @override
      _LoginState createState() => _LoginState();
    }
    
    class _LoginState extends State<Login> {
      final GoogleSignIn googleSignIn = GoogleSignIn();
      final FirebaseAuth firebaseAuth = FirebaseAuth.instance;
      SharedPreferences preferences;
      bool loading;
      bool isLogedin = false;
    
      @override
      void initState() {
        super.initState();
        isSignedIn();
      }
    
      void isSignedIn() async {
        setState(() {
          loading = true;
        });
        preferences = await SharedPreferences.getInstance();
        isLogedin = await googleSignIn.isSignedIn();
        if (isLogedin) {
          Navigator.pushReplacement(
              context, MaterialPageRoute(builder: (context) => HomePage()));
        }
        setState(() {
          loading = false;
        });
      }
    
      Future handleSignIn() async {
        preferences = await SharedPreferences.getInstance();
    
        setState(() {
          loading = true;
        });
        GoogleSignInAccount googleUser = await googleSignIn.signIn();
        GoogleSignInAuthentication googleSignInAuthentication =
            await googleUser.authentication;
        FirebaseUser firebaseUser = await firebaseAuth.signInWithGoogle(
            idToken: googleSignInAuthentication.idToken,
            accessToken: googleSignInAuthentication.accessToken);
        if (firebaseUser != null) {
          final QuerySnapshot result = await Firestore.instance
              .collection('users')
              .where('id', isEqualTo: firebaseUser.uid)
              .getDocuments();
          final List<DocumentSnapshot> documents = result.documents;
          if (documents.length == 0) {
            //insert the user to our collection
            Firestore.instance
                .collection('users')
                .document(firebaseUser.uid)
                .setData({
              'id': firebaseUser.uid,
              'username':firebaseUser.displayName,
              'profilePicture':firebaseUser.photoUrl
            });
            await preferences.setString('id', firebaseUser.uid);
            await preferences.setString('username', firebaseUser.displayName);
            await preferences.setString('photoUrl', firebaseUser.photoUrl);
          }else{
            await preferences.setString('id', documents[0]['id']);
            await preferences.setString('username', documents[0]['username']);
            await preferences.setString('photoUrl', documents[0]['photoUrl']);
          }
          Fluttertoast.showToast(msg: 'Login was successful');
          setState(() {
            loading = false;
          });
          Navigator.pushReplacement(
    
              context, MaterialPageRoute(builder: (context) => HomePage()));
    
        } else {
    
          Fluttertoast.showToast(msg: "Login failed");
    
        }
      }
    
    //THIS IS PUBSPEC.YAML dependencies
    
    dependencies:
      flutter:
        sdk: flutter
      carousel_pro: ^0.0.13
      firebase_auth: ^1.0.1
      cloud_firestore: ^1.0.3
      google_sign_in: ^5.0.1
      shared_preferences: ^2.0.5
      fluttertoast: ^8.0.3

1 个答案:

答案 0 :(得分:2)

所有使用来自社交提供商的 OAuth 令牌登录 Firebase 身份验证现在都通过 signInWithCredential 完成。

有关此代码示例,请参阅 signing in with Google 上的 FlutterFire 文档。

相关问题