정의되지 않은 클래스 'FirebaseUser'
저는 Flutter를 처음 사용합니다. Firebase Auth / Google Auth에 문제가 있습니다 . 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);
Deprecation of UserUpdateInfo
class for firebaseUser.updateProfile
method. Example:
Future updateName(String name, FirebaseUser user) async {
var userUpdateInfo = new UserUpdateInfo();
userUpdateInfo.displayName = name;
await user.updateProfile(userUpdateInfo);
await user.reload();
}
now
import 'package:firebase_auth/firebase_auth.dart' as firebaseAuth;
Future updateName(String name, auth.User firebaseUser) async {
firebaseUser.updateProfile(displayName: name);
await firebaseUser.reload();
}
Run
flutter pub get
Then rebuild your app.
This can be your signin function with email and password as of Sept 2020.Initialze app is a new introduced method we must at least call once before we use any other firebase methods.
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;
});
}
}
}
In the newest version of firebase_auth, the class FirebaseUser was changed to User, and the class AuthResult was changed to UserCredentail. Therefore change FirebaseUser to User
Since firebase_auth 0.18.0
, the class FirebaseUser
was changed to User