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
相关产品推荐
相关产品推荐

