Flutter:dart 迁移和空安全后的新错误

时间:2021-05-05 06:07:19

标签: flutter dart google-cloud-firestore

在运行 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;
    }
  }

导致错误的原因是什么?

1 个答案:

答案 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!);
}