flutter - '用户模型?函数(用户)”不能分配给参数类型“用户模型函数(用户?)”,因为“用户模型?” 可以为空,并且 'UserModel' 不是
问题描述
#我一直在关注 twitter 克隆的 youtube 项目,将 _userFromFirebaseUser 放入 map() 时出现错误;#
##我在 13:29 收到错误,这是链接。https://www.youtube.com/watch?v=YI7avcWI3aQ&t=919s ##
##我在终端收到的错误是Launching lib\main.dart on sdk gphone x86 arm in debug mode... lib\main.dart:1 lib/services/auth/auth.dart:13:40: Error :参数类型'UserModel?函数(用户)”不能分配给参数类型“用户模型函数(用户?)”,因为“用户模型?” 可以为空,而 'UserModel' 不是。
- 'UserModel' 来自'package:twitterclone/models/users.dart' ('lib/models/users.dart')。
- '用户'来自'package:firebase_auth/firebase_auth.dart'('../../AppData/Local/Pub/Cache/hosted/pub.dartlang.org/firebase_auth-1.0.1/lib/firebase_auth.dart' )。返回 auth.authStateChanges().map(_userFromFirebaseUser);
代码和目录
-users.dart
class UserModel {
final String id;
UserModel({required this.id});
}
-auth.dart
import 'package:firebase_auth/firebase_auth.dart';
import 'package:twitterclone/models/users.dart';
class AuthService {
FirebaseAuth auth = FirebaseAuth.instance;
UserModel? _userFromFirebaseUser(User user) {
// ignore: unnecessary_null_comparison
return user != null ? UserModel(id: user.uid) : null;
}
Stream<UserModel> get user {
return auth.authStateChanges().map(_userFromFirebaseUser);
}
Future<void> signUp(email, password) async {
try {
User user = (await auth.createUserWithEmailAndPassword(
email: email, password: password)) as User;
_userFromFirebaseUser(user);
} on FirebaseAuthException catch (e) {
if (e.code == 'user-not-found') {
print('No user found for that email.');
} else if (e.code == 'wrong-password') {
print('Wrong password provided for that user.');
}
} catch (e) {
print(e);
}
}
Future<void> signIn(email, password) async {
try {
User user = (await auth.signInWithEmailAndPassword(
email: email, password: password)) as User;
_userFromFirebaseUser(user);
} on FirebaseAuthException catch (e) {
print(e);
} catch (e) {
print(e);
}
}
}
解决方案
在
UserModel? _userFromFirebaseUser(User user) {
// ignore: unnecessary_null_comparison
return user != null ? UserModel(id: user.uid) : null;
}
由于UserModel
可以为空,因此也将参数更改为可以为空
UserModel? _userFromFirebaseUser(User? user) ...
推荐阅读
- kubernetes - Kubernetes Volume 将 ConfigMap 挂载到 pod 中的文件,而不覆盖所有其他文件
- python - 将每日/每小时/分钟水位数据转换为每日平均值(使用 pandas - python)
- python - 有人可以向我解释这个“字典”版本的斐波那契数列是如何工作的吗?
- django - 如何以编程方式获取 {% url '...' %} 的值?
- python - 如何在决策树回归器中定义“最小样本拆分”和“最小样本叶”?
- javascript - 移动反应网络应用程序不会登录,但可以在浏览器上运行
- perl - 如何使用 Perl 将大于 300KB 的文件移动到不同的位置
- mysql - 在mysql中添加外键时出现错误1215(HY000)?
- javascript - 为什么引导组件不起作用?
- javascript - Angular Web 应用程序 chrome.runtime 未定义