Flutter 错误:参数类型';用户模型?功能(用户?';can';不能分配给参数类型';用户模型函数(用户?';
我在颤振中得到以下错误 UserModel是一个类Flutter 错误:参数类型';用户模型?功能(用户?';can';不能分配给参数类型';用户模型函数(用户?';,flutter,dart,Flutter,Dart,我在颤振中得到以下错误 UserModel是一个类 class UserModel { final String uid; UserModel({this.uid}); } 出现这个错误的代码是 Stream<UserModel> get user { return _auth.authStateChanges() .map(_userFromFirebaseUser); } 流获取用户{ 返回_auth.authStateChanges
class UserModel {
final String uid;
UserModel({this.uid});
}
出现这个错误的代码是
Stream<UserModel> get user {
return _auth.authStateChanges()
.map(_userFromFirebaseUser);
}
流获取用户{
返回_auth.authStateChanges()
.map(_userFromFirebaseUser);
}
完整代码:
class AuthService {
final FirebaseAuth _auth = FirebaseAuth.instance;
UserModel? _userFromFirebaseUser(User? user) {
return user != null ? UserModel(uid: user.uid) : null;
}
Stream<UserModel> get user {
return _auth.authStateChanges()
.map(_userFromFirebaseUser);
}
Future signInAnon() async {
try {
UserCredential result = await _auth.signInAnonymously();
User user = result.user!;
return _userFromFirebaseUser(user);
} catch (e) {
print(e.toString());
return null;
}
}
Future signInWithEmailAndPassword( String email, String password) async {
try {
UserCredential result = await _auth.signInWithEmailAndPassword(email: email, password: password);
User user = result.user!;
return _userFromFirebaseUser(user);
} catch(e){
print(e.toString());
return null;
}
}
Future signUpWithEmailAndPassword( String email, String password) async {
try {
UserCredential result = await _auth.createUserWithEmailAndPassword(email: email, password: password);
User user = result.user!;
return _userFromFirebaseUser(user);
} catch(e){
print(e.toString());
return null;
}
}
Future signOut() async {
try {
return await _auth.signOut();
} catch (e){
print(e.toString());
return null;
}
}
}
类身份验证服务{
final FirebaseAuth _auth=FirebaseAuth.instance;
UserModel?\u userFromFirebaseUser(用户?用户){
返回用户!=null?UserModel(uid:user.uid):null;
}
流获取用户{
返回_auth.authStateChanges()
.map(_userFromFirebaseUser);
}
异步的{
试一试{
UserCredential结果=等待_auth.signinanoymously();
User=result.User!;
返回_userFromFirebaseUser(用户);
}捕获(e){
打印(如toString());
返回null;
}
}
带email和密码(字符串电子邮件、字符串密码)的未来登录异步{
试一试{
UserCredential result=wait _auth.signin with email and password(email:email,password:password);
User=result.User!;
返回_userFromFirebaseUser(用户);
}捕获(e){
打印(如toString());
返回null;
}
}
将来使用EmailAndPassword(字符串电子邮件、字符串密码)异步注册{
试一试{
UserCredential result=wait_auth.createUserWithEmailAndPassword(电子邮件:电子邮件,密码:密码);
User=result.User!;
返回_userFromFirebaseUser(用户);
}捕获(e){
打印(如toString());
返回null;
}
}
Future signOut()异步{
试一试{
return wait_auth.signOut();
}捕获(e){
打印(如toString());
返回null;
}
}
}
之所以发生这种情况,是因为您的\u userFromFirebaseUser
定义如下:
UserModel? _userFromFirebaseUser(User? user) {
这意味着您的意思是,您的\u userFromFirebaseUser
可能返回UserModel
或可能返回null
解决此问题的一种方法是使您的getter
返回Stream
,而不是Stream
流获取用户{
返回_auth.authStateChanges()
.map(_userFromFirebaseUser);
}
现在您的
getter
可能会返回一个UserModel
或者它可能会返回一个null
您能分享一下\u userFromFirebaseUser
是什么吗?
Stream<UserModel?> get user {
return _auth.authStateChanges()
.map(_userFromFirebaseUser);
}