คลาสที่ไม่ได้กำหนด "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);
การเลิกใช้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 แอพ 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ได้เปลี่ยนไปเป็นผู้ใช้และชั้นAuthResultก็เปลี่ยนไปUserCredentail ดังนั้นจึงเปลี่ยนFirebaseUserเป็นUser
ตั้งแต่firebase_auth 0.18.0
นั้นมาชั้นเรียนFirebaseUser
จึงเปลี่ยนเป็นUser