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

Flutter FirebaseAuth.instance.currentUser()废弃后的替代方案

问题原因

新版firebase_auth插件已经移除了异步方法currentUser(),将获取当前登录用户的逻辑拆分为两类实现:

  • 同步属性FirebaseAuth.instance.currentUser:类型为User?,可直接同步读取当前用户对象,无需异步等待,但在App冷启动、Firebase Auth尚未完成本地持久化用户信息加载时,会短暂返回null
  • 三个状态流用于监听用户状态变化:authStateChanges()、userChanges()、idTokenChanges()
适配FutureBuilder的替代方案

要实现和旧版currentUser()完全一致、返回Future<User?>类型、可直接传入FutureBuilder的方法,直接取authStateChanges()流的第一个事件即可:

future: FirebaseAuth.instance.authStateChanges().first,

该方法的行为和旧版currentUser()完全对齐:

  • 会等待Firebase完成初始化、加载完本地持久化的登录状态后再返回结果
  • 已登录时返回User对象,未登录时返回null
  • 仅返回一次结果,不会持续订阅状态变化,无额外性能开销
  • 如果需要获取包含最新用户资料(如头像、昵称修改后)的用户对象,可以替换为FirebaseAuth.instance.userChanges().first,逻辑完全一致
修改后的完整代码

补全了原代码未写完的用户ID判断逻辑,同时给FutureBuilder添加了泛型避免类型强转:

class Messages extends StatelessWidget {
const Messages({Key? key}) : super(key: key);

@override
Widget build(BuildContext context) {
    return StreamBuilder<QuerySnapshot>(
      stream: FirebaseFirestore.instance
          .collection('chat')
          .orderBy('createdAt', descending: true)
          .snapshots(),
      builder: (ctx, chatSnapshot) {
        if (chatSnapshot.connectionState == ConnectionState.waiting) {
          return const Center(
            child: CircularProgressIndicator(),
          );
        }
        final chatDocs = chatSnapshot.data!.docs;

        return FutureBuilder<User?>(
          future: FirebaseAuth.instance.authStateChanges().first,
          builder: (ctx, futureSnapshot) {
          if (futureSnapshot.connectionState == ConnectionState.waiting) {
            return const Center(child: CircularProgressIndicator());
          }

          return ListView.builder(
            reverse: true,
            itemCount: chatDocs.length,
            itemBuilder: (ctx, index) => MessageBubble(
              chatDocs[index]['text'],
              chatDocs[index]['userId'] == futureSnapshot.data?.uid,
            ),
          );
        });
      },
    );
  }
}

内容的提问来源于stack exchange,提问作者cueless

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 20:01:03