首页 > 解决方案 > 没有为类“FirebaseAuth”2 定义方法“signInWithGoogle”

问题描述

我正在尝试学习如何让颤振应用程序登录到 Firebase 身份验证。我使用 android studio 插件创建了一个新的颤振项目并添加了依赖项。尝试调用该方法时,我收到错误“没有为类 '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

标签: firebaseflutterfirebase-authenticationgoogle-signin

解决方案


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

有关这方面的代码示例,请参阅有关使用 Google 登录的 FlutterFire 文档。


推荐阅读