【问题标题】:The argument type 'AppUser? Function(User)' can't be assigned to the parameter type 'User Function(User?)'参数类型“AppUser?函数(用户)”不能分配给参数类型“用户函数(用户?)”
【发布时间】:2022-01-11 19:10:20
【问题描述】:

我收到此错误:The argument type 'AppUser? Function(User)' can't be assigned to the parameter type 'User Function(User?)'.

我发现另一个关于此主题的 stackoverflow 问题,但该解决方案对我不起作用

这是我的代码中出现错误的部分:

  AppUser? _userFromFirebaseUser(User user) {
    return user != null ? AppUser(uid: user.uid) : null;
  }

  Stream<User> get user {
    return _auth.authStateChanges().map(_userFromFirebaseUser);
  }

【问题讨论】:

  • (User user) 如果您不在“_userFromFirebaseUser”方法中为 (User? user) 更改它,则永远不能为空。没错,您的代码中存在问题之一。您还将和 User 映射到 AppUser 但期望 User 以换取您的 Stream,这是另一个问题。

标签: firebase flutter dart


【解决方案1】:

我希望你能更好地解释你想要做什么,但这就是这段代码不起作用的原因:

Stream<User> get user { ... }

您的流的值是User 类型。

您正在尝试使用此函数映射每个用户的值:

AppUser? _userFromFirebaseUser(User user) { ... }

但是该函数不返回User,它返回AppUser?,完全不同的是,您不能将AppUser? 添加到Stream&lt;User&gt;。要解决此问题,请更改流的类型:

Stream<AppUser?> get user { ... }

最后,我想让你知道user != null ? AppUser(uid: user.uid) : null;是多余的,因为user永远为空,用户的类型是User而不是User?,所以你实际上可以完全摆脱可空类型:

AppUser _userFromFirebaseUser(User user) {
  return AppUser(uid: user.uid);
}

Stream<AppUser> get user {
    return _auth.authStateChanges().map(_userFromFirebaseUser);
}

如果user 可以为空,上面的代码会出错,那么你实际上需要做与我做的相反的事情,使所有内容都可以为空:

AppUser? _userFromFirebaseUser(User? user) {
  return user == null ? null : AppUser(uid: user.uid);
}

Stream<AppUser?> get user {
    return _auth.authStateChanges().map(_userFromFirebaseUser);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-18
    • 2021-08-27
    • 2022-01-05
    • 1970-01-01
    • 2021-06-17
    • 2021-10-19
    • 2013-11-03
    相关资源
    最近更新 更多