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

Flutter Bloc状态变化展示Snackbar:如何获取Google登录错误状态的异常值

解决方案

1. 原有判断逻辑的问题

你当前用if (state == GoogleLoginErrorState())的写法存在两个问题:

  • 每次执行GoogleLoginErrorState()都会实例化一个全新的状态对象,和你Bloc中yield出来的携带异常参数的状态不是同一个实例,值对比结果永远为false
  • 状态判断应优先使用类型校验,而不是实例值对比

2. 正确的异常访问写法

在BlocBuilder中使用is关键字做类型判断,Dart会自动完成类型提升,直接访问error属性即可:

BlocBuilder<GoogleLoginBloc, GoogleLoginState>(
  builder: (context, state) {
    if (state is GoogleLoginErrorState) {
      // 直接获取异常实例
      final PlatformException loginError = state.error;
      
      // 后续自定义处理逻辑示例
      switch(loginError.code) {
        case 'user-cancel':
          // 处理用户主动取消登录的场景
          break;
        default:
          // 处理其他登录异常
          print('登录异常:${loginError.message}');
      }
    }
    // 其他状态处理逻辑
    return const SizedBox();
  }
)

3. 可选优化建议

为了避免空安全风险,建议给GoogleLoginErrorState的构造函数加上required修饰符,强制传入异常参数:

class GoogleLoginErrorState extends GoogleLoginState {
  final PlatformException error;
  // 添加required修饰
  GoogleLoginErrorState({required this.error});

  @override
  List<Object> get props => [error];
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 03:30:05