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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 02:06:34