我正在尝试学习如何让 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
答案 0 :(得分:2)
所有使用来自社交提供商的 OAuth 令牌登录 Firebase 身份验证现在都通过 signInWithCredential
完成。
有关此代码示例,请参阅 signing in with Google 上的 FlutterFire 文档。