在运行 dart migrate 后,我遇到了很多错误,其中大部分我相信我已经修复了,但最后一个对我来说没有意义。
Stream<UserData> get user{
return _auth.authStateChanges()
.asyncMap(_userFromFireBaseUser as FutureOr<UserData> Function(User?));
}
有问题的部分是 .asyncMap
... 部分“as FutureOr<UserData> Function(User?));
”是由 dart migrate 添加的。
我得到的错误是
<块引用>错误:未定义类“FutureOr”。 (undefined_class) 和错误: 参数类型“动态函数(用户?)”不能分配给 参数类型 'FutureOr 函数(用户?)'。
将其余代码也贴出来,用于身份验证。
class AuthService extends ChangeNotifier
{
// UserData _currentUser = AuthService();
String? _uid;
String? _email;
String? get getUid => _uid;
String? get getEmail => _email;
final FirebaseAuth _auth = FirebaseAuth.instance;
//Create user ojb based on firebaseuser
UserData? _userFromFireBaseUser(User? user) {
return user != null ? UserData(uid: user.uid) : null;
}
Stream<UserData> get user{
return _auth.authStateChanges()
.asyncMap(_userFromFireBaseUser as FutureOr<UserData> Function(User?));
}
//Get UID
Future getCurrentUID() async
{
final currentUid = await _auth.currentUser!.uid;
return currentUid;
}
//Sign in(anon)
Future signInAnon() async
{
try
{
UserCredential result = await _auth.signInAnonymously();
User? user = result.user;
return _userFromFireBaseUser(user);
}
catch(e) {
print(e.toString());
return null;
}
}
导致错误的原因是什么?
答案 0 :(得分:1)
您可以简单地删除对 FutureOr<UserData> Function(User?)
的类型转换,因为 _userFromFireBaseUser
已经是获取 User?
并返回 UserData?
的函数。为了避免从流中返回空值,只需使用 where
过滤它们。使用此代码:
Stream<UserData> get user {
return _auth.authStateChanges()
.asyncMap(_userFromFireBaseUser)
.where((user) => user != null)
.map((user) => user!);
}