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

Flutter中如何根据邮箱/Gmail登录获取用户Provider快照并展示对应内容

问题解决:根据登录Provider展示不同内容

原代码问题分析

  • 错误使用contains("email")判断登录方式:providerData是List<UserInfo>类型,不能直接匹配字符串,需检查列表内每个元素的providerId属性
  • 代码存在语法结构问题:body: 位置不符合StreamBuilder的返回规则,builder必须直接返回合法Widget

修正后的完整代码

StreamBuilder<User?>(
  stream: authBloc.currentUser,
  builder: (context, snapshot) {
    // 处理加载状态
    if (snapshot.connectionState == ConnectionState.waiting) {
      return const CircularProgressIndicator();
    }
    
    // 无用户数据时的提示
    if (!snapshot.hasData) {
      return const Text('Oops something went wrong');
    }

    final user = snapshot.data!;
    // 判断登录所用的Provider
    final isEmailSignIn = user.providerData.any(
      (info) => info.providerId == 'password'
    );
    final isGmailSignIn = user.providerData.any(
      (info) => info.providerId == 'google.com'
    );

    // 根据Provider返回对应内容
    return Center(
      child: Column(
        mainAxisAlignment: MainAxisAlignment.center,
        children: [
          if (isEmailSignIn)
            const Text("你使用邮箱登录")
          else if (isGmailSignIn)
            const Text("你使用Gmail登录")
          else
            const Text("未知登录方式"),
        ],
      ),
    );
  },
)

关键说明

  • ProviderId对应规则:
    • 邮箱密码登录的providerId固定为password
    • Google(Gmail)登录的providerId固定为google.com
  • 使用user.providerData.any()遍历用户关联的所有登录方式,准确匹配目标Provider
  • 补充了加载状态处理,避免用户看到空白或错误提示
  • 修复原代码的语法结构,确保StreamBuilder的builder返回合法Widget

内容的提问来源于stack exchange,提问作者It'sPhil

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 02:17:35