问题描述
我是Flutter的新手。我遇到 Firebase身份验证/ Google身份验证问题 未定义 FirebaseUser 代码:
FirebaseAuth _auth = FirebaseAuth.instance;
GoogleSignIn googleSignIn = GoogleSignIn();
Future<FirebaseUser> currentUser() async { // The Issue is here in the Future<>
final GoogleSignInAccount account = await googleSignIn.signIn();
final GoogleSignInAuthentication authentication =
await account.authentication;
final GoogleAuthCredential credential = GoogleAuthProvider.getCredential(
idToken: authentication.idToken,accesstoken: authentication.accesstoken);
final AuthResult authResult = await _auth.signInWithCredential(credential);
final FirebaseUser user = authResult.user; // and here as I can't define this FirebaseUser object to return
return user;
}
Pubspec.yml
dependencies:
Flutter:
sdk: Flutter
cupertino_icons: ^0.1.3
firebase_auth: ^0.18.0
location: ^3.0.2
page_transition: ^1.1.6
google_sign_in: ^4.5.1
Flutter_facebook_login: ^3.0.0
firebase_database: ^4.0.0
我也面临着AuthResult的相同问题
final AuthResult authResult = await _auth.signInWithCredential(credential);
解决方法
从版本firebase_auth
0.18.0开始:
在最新版本的firebase_auth
中,类FirebaseUser
更改为User
,而类AuthResult
更改为UserCredentail
。因此,将您的代码更改为以下内容:
Future<User> currentUser() async {
final GoogleSignInAccount account = await googleSignIn.signIn();
final GoogleSignInAuthentication authentication =
await account.authentication;
final GoogleAuthCredential credential = GoogleAuthProvider.credential(
idToken: authentication.idToken,accessToken: authentication.accessToken);
final UserCredential authResult =
await _auth.signInWithCredential(credential);
final User user = authResult.user;
return user;
}
FirebaseUser
更改为User
AuthResult
更改为UserCredential
GoogleAuthProvider.getCredential()
更改为GoogleAuthProvider.credential()
通知用户登录状态更改的
onAuthStateChanged
已替换为authStateChanges()
currentUser()
是一种用于检索当前登录用户的方法,已被属性currentUser
取代,并且不再返回Future<FirebaseUser>
。
以上两种方法的示例:
FirebaseAuth.instance.authStateChanges().listen((event) {
print(event.email);
});
并且:
var user = FirebaseAuth.instance.currentUser;
print(user.uid);
弃用UserUpdateInfo
类的firebaseUser.updateProfile
方法。
示例:
Future updateName(String name,FirebaseUser user) async {
var userUpdateInfo = new UserUpdateInfo();
userUpdateInfo.displayName = name;
await user.updateProfile(userUpdateInfo);
await user.reload();
}
现在
import 'package:firebase_auth/firebase_auth.dart' as firebaseAuth;
Future updateName(String name,auth.User firebaseUser) async {
firebaseUser.updateProfile(displayName: name);
await firebaseUser.reload();
}
,
运行
flutter pub get
然后重建您的应用。
,这可能是您自2020年9月起使用电子邮件和密码登录的功能。Initialze应用程序是一种新引入的方法,在使用任何其他firebase方法之前,我们至少必须调用一次。
Future<void> signin() async {
final formState = _formkey.currentState;
await Firebase.initializeApp();
if (formState.validate()) {
setState(() {
loading = true;
});
formState.save();
try {
print(email);
final User user = (await FirebaseAuth.instance
.signInWithEmailAndPassword(email: email,password: password))
.user;
} catch (e) {
print(e.message);
setState(() {
loading = false;
});
}
}
}
,
在最新版本的firebase_auth中,类 FirebaseUser 更改为 User ,而类 AuthResult 更改为 UserCredentail 。因此,将 FirebaseUser 更改为 User
,自 firebase_auth 0.18.0
起,类 FirebaseUser
已更改为 User