Flutter Formz报错:FormzStatus无isSubmissionFailure getter,状态无法访问
解决FormzStatus调用isSubmissionFailure报错的问题
问题原因
FormzStatus本身并未内置isSubmissionFailure这类getter属性,官方提供的枚举值仅包括:pure、invalid、valid、submissionInProgress、submissionSuccess、submissionFailure。你代码中使用的isSubmissionFailure属于自定义扩展属性,若未定义或导入对应的扩展,就会触发报错。
解决方案
方案1:直接判断枚举值(最简单)
无需依赖扩展,直接对比FormzStatus的枚举值即可:
BlocListener<SignupBloc, SignupState>( listener: (context, state) { if (state.status == FormzStatus.submissionFailure) { // 这里写提交失败的处理逻辑 } }, // 其他代码 )
方案2:自定义FormzStatus扩展(复用性更强)
如果习惯用isSubmissionFailure这类语法,可自己封装扩展类,在项目中全局使用:
// 新建一个formz_status_extension.dart文件 extension FormzStatusExtension on FormzStatus { bool get isSubmissionInProgress => this == FormzStatus.submissionInProgress; bool get isSubmissionSuccess => this == FormzStatus.submissionSuccess; bool get isSubmissionFailure => this == FormzStatus.submissionFailure; bool get isPure => this == FormzStatus.pure; bool get isInvalid => this == FormzStatus.invalid; bool get isValid => this == FormzStatus.valid; }
然后在需要使用的文件中导入该扩展:
import 'path/to/formz_status_extension.dart';
之后就能正常使用state.status.isSubmissionFailure了。
额外检查
确保你的Bloc逻辑中,在提交失败时正确emit了对应状态:
// 在SignupBloc的提交事件处理中 on<SignupSubmitted>((event, emit) async { // 验证表单等逻辑... try { // 提交请求 await repository.signup(...); emit(state.copyWith(status: FormzStatus.submissionSuccess)); } catch (e) { emit(state.copyWith( status: FormzStatus.submissionFailure, error: e.toString(), )); } });
内容的提问来源于stack exchange,提问作者Sheyzi Silver
相关产品推荐
相关产品推荐

