【问题标题】:Flutter : New error after dart migrate and null safety颤振:飞镖迁移和空安全后的新错误
【发布时间】:2021-07-27 11:02:43
【问题描述】:

在运行 dart migrate 之后,我遇到了很多错误,我相信我已经修复了大部分错误,但最后一个对我来说没有意义。

 Stream<UserData> get user{
return _auth.authStateChanges()
    .asyncMap(_userFromFireBaseUser as FutureOr<UserData> Function(User?));

}

有问题的部分是.asyncMap...部分“as FutureOr&lt;UserData&gt; Function(User?));”是dart migrate添加的。

我遇到的错误是

错误:未定义的类“FutureOr”。 (undefined_class) 和错误: 参数类型“动态函数(用户?)”不能分配给 参数类型'FutureOr Function(User?)'。

也发布其余代码,用于身份验证。

  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;
    }
  }

是什么导致了错误?

【问题讨论】:

    标签: flutter dart google-cloud-firestore


    【解决方案1】:

    您可以简单地删除类型转换为FutureOr&lt;UserData&gt; Function(User?),因为_userFromFireBaseUser 已经是获取User? 并返回UserData? 的函数。为了避免从流中返回空值,只需使用where 过滤它们。使用此代码:

    Stream<UserData> get user {
      return _auth.authStateChanges()
        .asyncMap(_userFromFireBaseUser)
        .where((user) => user != null)
        .map((user) => user!);
    }
    

    【讨论】:

    • 这行得通,谢谢。必须适应这种新方式...
    • 也许我可以帮助我跟进?修复此问题后,我现在得到类型 '_StreamHandlerTransformer, List>' is not a subtype of type 'StreamTransformer>, List>' in type cast 所有这些都是在 dart migrate 和 null 安全更新之后出现的
    • @s3v3ns 如果没有代码示例,恐怕我无能为力。可能最好发布另一个问题?
    • 代码为.transform(Utils.transformer(Todo.fromJson) as StreamTransformer>, List>);
    • 我猜问题是你的转换器返回 QuerySnapshot&lt;Object?&gt; 但应该返回 QuerySnapshot&lt;Object&gt;QuerySnapshot&lt;Map&lt;String, dynamic&gt;&gt; 而没有可选的泛型类型。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-07
    • 2021-12-07
    • 1970-01-01
    • 2021-06-10
    • 1970-01-01
    • 2019-02-28
    相关资源
    最近更新 更多