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

Flutter按Firestore中userType跳转登录后页面出现报错如何修复?

问题修复方案

错误根源

FirebaseAuth.instance.authStateChanges()返回的流仅包含Firebase身份认证的User基础数据,仅存储uid、邮箱等认证相关信息,不包含你存放在Firestore数据库中的自定义userType字段,你直接对认证用户对象调用['userType']取值属于类型不匹配的非法操作,因此触发报错。

修复思路

拿到认证用户的uid后,再请求Firestore中对应uid的用户文档,从中读取userType字段再做跳转判断,完整修复代码如下:

import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter/material.dart';

// 你的页面导入省略
// import 'xxx.dart'

Widget build(BuildContext context) {
  return StreamBuilder(
    stream: FirebaseAuth.instance.authStateChanges(),
    builder: (context, authSnapshot) {
      // 未登录状态直接返回认证页
      if (!authSnapshot.hasData) {
        return const AuthScreen();
      }
      // 已获取到认证用户,取出uid
      final String userId = authSnapshot.data!.uid;
      // 嵌套StreamBuilder监听Firestore相应用户文档的实时变化
      return StreamBuilder(
        stream: FirebaseFirestore.instance.collection('users').doc(userId).snapshots(),
        builder: (context, userDocSnapshot) {
          // 数据加载中展示加载态
          if (userDocSnapshot.connectionState == ConnectionState.waiting) {
            return const Scaffold(
              body: Center(child: CircularProgressIndicator()),
            );
          }
          // 读取用户数据中的userType字段
          final Map<String, dynamic>? userInfo = userDocSnapshot.data?.data();
          final String? userType = userInfo?['userType'];
          // 根据用户类型跳转对应页面
          if (userType == 'Confinement Lady') {
            return const CLLadyMainScreen();
          } else if (userType == 'Customer') {
            return const CustomerMainScreen();
          }
          // 异常情况返回认证页
          return const AuthScreen();
        },
      );
    },
  );
}

额外注意

  • 请确保你的项目已经正确引入cloud_firestore依赖,且Firestore中users集合的文档id和认证用户的uid完全一一对应
  • 加载态的样式可根据你的产品需求自行调整,避免用户等待时出现白屏

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 04:36:02