【问题标题】:error: The argument type 'UserModel? Function(User?)' can't be assigned to the parameter type 'UserModel Function(User?)'错误:参数类型'UserModel? Function(User?)' 不能分配给参数类型'UserModel Function(User?)'
【发布时间】:2021-08-20 18:43:49
【问题描述】:

我在颤振中收到以下错误。

UserModel 是一个类

class UserModel {
  final String uid;
  UserModel({this.uid});
}

出现这个错误的代码是

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

完整代码:

class AuthService {
  final FirebaseAuth _auth = FirebaseAuth.instance;

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

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

  }
  Future signInWithEmailAndPassword( String email, String password) async {
    try {
      UserCredential result = await _auth.signInWithEmailAndPassword(email: email, password: password);
      User user = result.user!;
      return _userFromFirebaseUser(user);
    } catch(e){
      print(e.toString());
      return null;
    }
  }

  Future signUpWithEmailAndPassword( String email, String password) async {
    try {
      UserCredential result = await _auth.createUserWithEmailAndPassword(email: email, password: password);
      User user = result.user!;
      return _userFromFirebaseUser(user);
    } catch(e){
      print(e.toString());
      return null;
    }
  }

  Future signOut() async {
    try {
      return await _auth.signOut();
    } catch (e){
      print(e.toString());
      return null;

    }
  }



}

【问题讨论】:

  • 你能分享一下_userFromFirebaseUser是什么吗?

标签: flutter dart


【解决方案1】:

发生这种情况是因为您的 _userFromFirebaseUser 是这样定义的,

UserModel? _userFromFirebaseUser(User? user) {

所以这意味着你的意思是,你的_userFromFirebaseUser 可能返回一个UserModel 或者可能返回一个null

解决此问题的一种方法是让您的 getter 返回 Stream&lt;UserModel?&gt; 而不是 Stream&lt;UserModel&gt;

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

现在您的getter 可能会返回UserModel,也可能会返回null

【讨论】:

    猜你喜欢
    • 2021-10-19
    • 2023-01-25
    • 1970-01-01
    • 2021-02-12
    • 2021-09-04
    • 1970-01-01
    • 2022-01-17
    • 2021-08-11
    • 1970-01-01
    相关资源
    最近更新 更多