未为类“ 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
答案 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;
}