Flutter Null Safety 和 Firebase 身份验证错误
Flutter Null Safety and Firebase authentication error
我正在为我的应用程序使用 flutter 和 firebase。我不知道为什么我在下面的代码中出错。使用降级版本的 flutter(没有空安全)它工作正常但是在迁移到空安全之后,我在这里面临问题。
class AuthenticationService {
final FirebaseAuth firebaseAuth = FirebaseAuth.instance;
final firebaseUser = FirebaseAuth.instance.currentUser;
users.User? _userFromFirebase(User user){
return user != null ? users.User(id: user.uid, email: user.email):null;
}
User? user() {
firebaseAuth.authStateChanges().listen((User? user) {
if(user == null){
return null;
} else {
return user; //I am getting error here in return statement
}
});
}
Future loginWithEmail({required String email, required String password}) async {
try{
UserCredential result = await firebaseAuth.signInWithEmailAndPassword(email: email, password: password);
User? user = result.user;
return _userFromFirebase(user!);
} catch (e) {
return e.toString();
}
}
Future register({required String email, required String password}) async {
try{
UserCredential result = await firebaseAuth.createUserWithEmailAndPassword(email: email, password: password);
User? user = result.user;
return _userFromFirebase(user!);
} catch (e) {
return e.toString();
}
}
}
在 User? user(){}
方法中,我在 return 语句中遇到错误。任何人都可以知道吗??
我认为有一些小错误我无法识别。
错误是:
Error: Can't return a value from a void function.
您不能 return 从 listen
回调到 user()
函数范围的内容。
与您现在所拥有的最接近的是 return 一个 Future<User?>
类似这样的东西:
Future<User?> user() {
return firebaseAuth.authStateChanges().first()
}
您必须在此处 return 一个 Future
(或将函数标记为 async
,其作用几乎相同),因为 authStateChanges()
来自 Firebase异步,并且在 return
语句运行时尚不可用。
我建议阅读 Flutter/Dart 中的异步行为,例如:
如果它是回调并且必须等待一段时间,那么您必须将您的方法声明为 future。因为 return 类型的用户是未来的,这需要一些时间所以你必须将方法作为未来...
希望这对你有用
我正在为我的应用程序使用 flutter 和 firebase。我不知道为什么我在下面的代码中出错。使用降级版本的 flutter(没有空安全)它工作正常但是在迁移到空安全之后,我在这里面临问题。
class AuthenticationService {
final FirebaseAuth firebaseAuth = FirebaseAuth.instance;
final firebaseUser = FirebaseAuth.instance.currentUser;
users.User? _userFromFirebase(User user){
return user != null ? users.User(id: user.uid, email: user.email):null;
}
User? user() {
firebaseAuth.authStateChanges().listen((User? user) {
if(user == null){
return null;
} else {
return user; //I am getting error here in return statement
}
});
}
Future loginWithEmail({required String email, required String password}) async {
try{
UserCredential result = await firebaseAuth.signInWithEmailAndPassword(email: email, password: password);
User? user = result.user;
return _userFromFirebase(user!);
} catch (e) {
return e.toString();
}
}
Future register({required String email, required String password}) async {
try{
UserCredential result = await firebaseAuth.createUserWithEmailAndPassword(email: email, password: password);
User? user = result.user;
return _userFromFirebase(user!);
} catch (e) {
return e.toString();
}
}
}
在 User? user(){}
方法中,我在 return 语句中遇到错误。任何人都可以知道吗??
我认为有一些小错误我无法识别。
错误是:
Error: Can't return a value from a void function.
您不能 return 从 listen
回调到 user()
函数范围的内容。
与您现在所拥有的最接近的是 return 一个 Future<User?>
类似这样的东西:
Future<User?> user() {
return firebaseAuth.authStateChanges().first()
}
您必须在此处 return 一个 Future
(或将函数标记为 async
,其作用几乎相同),因为 authStateChanges()
来自 Firebase异步,并且在 return
语句运行时尚不可用。
我建议阅读 Flutter/Dart 中的异步行为,例如:
如果它是回调并且必须等待一段时间,那么您必须将您的方法声明为 future。因为 return 类型的用户是未来的,这需要一些时间所以你必须将方法作为未来...
希望这对你有用