Dart:参数类型‘Userr? Function(User?)’无法分配给‘User Function(User?)’怎么办?
解决Firebase Dart认证的类型不匹配问题
问题核心
错误源于流的类型不兼容:
_auth.authStateChanges()返回Stream<User?>,经过map(_userFromFirebaseUser)转换后,输出的是Stream<Userr?>(因为_userFromFirebaseUser返回Userr?)- 但你定义的
usergetter返回类型是Stream<User?>,和转换后的类型不匹配,触发类型错误。
修复步骤
1. 修正流的返回类型
将user getter的返回类型改为Stream<Userr?>,匹配转换后的结果:
Stream<Userr?> get user { return _auth.authStateChanges().map(_userFromFirebaseUser); }
2. 优化匿名登录方法(可选但推荐)
- 给
signInAnon指定明确返回类型Future<Userr?>,避免动态类型 - 移除不安全的强制解包
user!,利用_userFromFirebaseUser的null处理逻辑:
Future<Userr?> signInAnon() async { try { UserCredential result = await _auth.signInAnonymously(); return _userFromFirebaseUser(result.user); } catch (e) { print(e); return null; } }
完整修复代码
import 'package:brew_crew/models/user.dart'; import 'package:firebase_auth/firebase_auth.dart'; class AuthService { final FirebaseAuth _auth = FirebaseAuth.instance; Userr? _userFromFirebaseUser(User? user) { return user != null ? Userr(uid: user.uid) : null; } Stream<Userr?> get user { return _auth.authStateChanges().map(_userFromFirebaseUser); } Future<Userr?> signInAnon() async { try { UserCredential result = await _auth.signInAnonymously(); return _userFromFirebaseUser(result.user); } catch (e) { print(e); return null; } } }
内容的提问来源于stack exchange,提问作者SANIKA CHANDODE
相关产品推荐
相关产品推荐

