You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Dart:参数类型‘Userr? Function(User?)’无法分配给‘User Function(User?)’怎么办?

解决Firebase Dart认证的类型不匹配问题

问题核心

错误源于流的类型不兼容:

  • _auth.authStateChanges()返回Stream<User?>,经过map(_userFromFirebaseUser)转换后,输出的是Stream<Userr?>(因为_userFromFirebaseUser返回Userr?)
  • 但你定义的user getter返回类型是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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 08:40:28