firebase - 参数类型“我的用户?Function(User)' 不能分配给参数类型'MyUser Function(User?)'。Flutter Firebase 应用程序构建问题
问题描述
关于 Flutter Firebase 应用构建。流函数有一条红线。目前使用 2 个文件 auth.dart 和 user.dart
我的代码 auth.dart 文件:
import 'package:coffee_dan/models/user.dart';
import 'package:firebase_auth/firebase_auth.dart';
class AuthService {
final FirebaseAuth _auth = FirebaseAuth.instance;
MyUser Function(User? event)? get userFromFirebaseUser => null;
MyUser? _userFromFirebaseUser(User user) {
// ignore: unnecessary_null_comparison
return user!= null ? MyUser(uid: user.uid) : null;
}
Stream<MyUser> get user {
return _auth.authStateChanges().map(_userFromFirebaseUser); Red Line in here **_userFromFirebaseUser**
}
Future signInAnon() async {
try {
UserCredential result = await _auth.signInAnonymously();
User? user = result.user;
return _userFromFirebaseUser(user!);
} catch (e) {
print(e.toString());
return null;
}
}
}
和
user.dart 文件:
class MyUser {
final String uid;
MyUser({required this.uid});
}
解决方案
您的代码中有两点需要更改:
您的 _userFromFirebaseUser 签名需要接收一个可为空的用户,然后您就可以删除您的“忽略”注释行。它应该如下所示:
MyUser? _userFromFirebaseUser(User? user) { return user != null ? MyUser(uid: user.uid) : null; }
您的用户 getter 应该返回 Stream<MyUser?> ,这将消除错误。那应该如下所示:
Stream<MyUser?> get user { return _auth.authStateChanges().map(_userFromFirebaseUser); }
完整代码(保留您的导入):
class AuthService {
final FirebaseAuth _auth = FirebaseAuth.instance;
MyUser Function(User? event)? get userFromFirebaseUser => null;
MyUser? _userFromFirebaseUser(User? user) {
return user!= null ? MyUser(uid: user.uid) : null;
}
Stream<MyUser?> 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;
}
}
}
推荐阅读
- hibernate - Hibernate 重新创建之前在 merge() 时删除的实体 - 如何避免?
- apache-spark - 使用源代码和获取预构建版本时使用的不同 Spark 版本
- elasticsearch - 如何使用 Datadog 监控 Elastic Cloud 上的 ElasticSearch 集群?
- c - 动态分配二维字符串数组并将其作为参数传递给函数
- excel - 如何合并MVC应用程序.Net网格中的单元格我还需要将网格数据导出到excel
- angular - 微前端:微前端的发布订阅系统
- elasticsearch - 无法将弹性搜索从 5 升级到 6
- javascript - 使用 React Saga 时 Axios 请求发送两次
- java - Powermockito 静态方法调用
- java - Mockito 在使用时抛出 NPE