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

