无法解决:未为“ Firebase auth”类定义signInWithGoogle

时间:2019-06-25 14:13:37

标签: dart

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

我尝试更改pubspec.yaml文件的版本,但由于firebase auth,google_sign_in,firebase分析,firebase数据库的版本不同,因此无法正常工作。 我已经更改了构建gradle文件中的依赖项,但是它也没有帮助我。 我无法根据Google找到我的密钥工具来获取用于Firebase Google身份验证的SHA-1指纹。

    final googleSignIn = new GoogleSignIn();
    final analytics = new FirebaseAnalytics();
    final auth = FirebaseAuth.instance;
    final reference = FirebaseDatabase.instance.reference().child('Blogs');
    String temp;
    enum _DesignAppMenuItems { profile, logout }

    class HomePage extends StatefulWidget {
    @override
    HomePageState createState() => new HomePageState();
    }

    class HomePageState extends State<HomePage> {
    bool loggedIn = false;
    bool _googleLoginProgress = false;
    SharedPreferences prefs;

    Future<Null> _function() async {
    SharedPreferences prefs;
    prefs = await SharedPreferences.getInstance();
    this.setState(() {
    if (prefs.getString("username") != null) {
     loggedIn = true;
      } else {
        loggedIn = false;
      }
     });
     }

     Future<Null> checkStatusOfUser() async {
     await _ensureLoggedIn();
     }

     Future<Null> _ensureLoggedIn() async {
      SharedPreferences prefs;
      prefs = await SharedPreferences.getInstance();

      GoogleSignInAccount user = googleSignIn.currentUser;

      try {
      if (user == null) user = await googleSignIn.signInSilently();
      if (user == null) {
        user = await googleSignIn.signIn();
        analytics.logLogin();
      }
      if (await auth.currentUser() == null) {
        GoogleSignInAuthentication credentials =
            await googleSignIn.currentUser.authentication;

        await auth.signInWithGoogle(
          idToken: credentials.idToken,
          accessToken: credentials.accessToken,
        );
      }
      prefs.setString("username", user.displayName);
      prefs.setString("userid", user.id);
      prefs.setString("useremail", user.email);
      prefs.setString("userphotourl", user.photoUrl);
      analytics.logLogin();
      final userRef = FirebaseDatabase.instance.reference().child('Users');
      userRef
          .child(user.id)
          .set({"name": user.displayName, "image": user.photoUrl});
      this.setState(() {
        loggedIn = true;
        _googleLoginProgress = false;
      });
    } catch (error) {
      print(error);
    }
  }
....
  @override
  Widget build(BuildContext context) {
    Scaffold.....

编译器消息:

  

lib / HomePage.dart:63:20:错误:方法'signInWithGoogle'不是   为“ FirebaseAuth”类定义。    -'FirebaseAuth'来自'package:firebase_auth / firebase_auth.dart'('file:/// C:/flutter/.pub-cache/hosted/pub.dartlang.org/firebase_auth-0.7.0/lib/firebase_auth。镖')。   尝试将名称更正为现有方法的名称,或定义   一种名为“ signInWithGoogle”的方法。           等待auth.signInWithGoogle(                      ^^^^^^^^^^^^^^^^^ lib / PostBlogPage.dart:30:16:错误:未为该类定义方法'signInWithGoogle'   “ FirebaseAuth”。    -'FirebaseAuth'来自'package:firebase_auth / firebase_auth.dart'('file:/// C:/flutter/.pub-cache/hosted/pub.dartlang.org/firebase_auth-0.7.0/lib/firebase_auth。镖')。   尝试将名称更正为现有方法的名称,或定义   一种名为“ signInWithGoogle”的方法。       等待auth.signInWithGoogle(                  ^^^^^^^^^^^^^^^^^ C:\ Users \ Ankit \ AndroidStudioProjects \ blogand \ lib \ main.dart编译失败   错误:Gradle任务assembleDebug失败,退出代码为1

1 个答案:

答案 0 :(得分:0)

您需要使用signInWithCredential而不是signInWithGoogle。

链接到这里:https://pub.flutter-io.cn/packages/firebase_auth

将以下导入内容添加到您的Dart代码中:

const ViewChild: AngularCore.ViewChild

初始化GoogleSignIn和FirebaseAuth:

import 'package:firebase_auth/firebase_auth.dart';

您现在可以使用Firebase _auth在Dart代码中进行身份验证,例如

final GoogleSignIn _googleSignIn = GoogleSignIn();
final FirebaseAuth _auth = FirebaseAuth.instance;

然后从登录按钮onPress中,使用将来对FirebaseUser和可能的异常的回调来调用_handleSignIn方法。

Future<FirebaseUser> _handleSignIn() async {
  final GoogleSignInAccount googleUser = await _googleSignIn.signIn();
  final GoogleSignInAuthentication googleAuth = await googleUser.authentication;

  final AuthCredential credential = GoogleAuthProvider.getCredential(
    accessToken: googleAuth.accessToken,
    idToken: googleAuth.idToken,
  );

  final FirebaseUser user = await _auth.signInWithCredential(credential);
  print("signed in " + user.displayName);
  return user;
}
相关问题