firebase - 没有为类“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
解决方案
现在,所有使用来自社交提供商的 OAuth 令牌登录到 Firebase 身份验证都是通过signInWithCredential
.
有关这方面的代码示例,请参阅有关使用 Google 登录的 FlutterFire 文档。
推荐阅读
- heroku - 如何解决导致 Heroku 应用程序崩溃的类型错误?
- angular - 为生产构建时“意外的令牌:punc ())”
- javascript - 如何在 AngularJS 中访问 DOM 元素
- swift - 每次呈现视图控制器时呈现插页式广告 - Swift 4
- python - 给定两个 ndarray,我如何以 numpy-ish 方式提取属于索引子集的条目?
- python - Pytorch RuntimeError:聚集中的索引无效
- php - 除了“get”命名的之外,Slim Framework 路由返回未找到
- html - 无法为卡片打开设置动画
- netty - netty - ssl/tls 双向认证
- docker - 设置 IP 表失败:无法启用 NAT 规则