Flutter Bloc 版本 8.0.0 的未定义名称 'state'

Undefined name 'state' for flutter bloc version 8.0.0

我正在尝试访问 bloc(使用最新版本的 flutter_bloc: 8.0.0state BlocBuilder 中的值,但我不断收到 state 的错误未定义。我发现 类似问题,但这不是问题所在。 SetInitialValuesEvent 在初始化 ConvertBloc 时添加 _onSetInitialValuesEventToState()

我唯一能想到的尝试是检查 state 是否在 BlocConsumer 侦听器中定义(可访问)(并且是):

Widget build(BuildContext context) {
        return BlocConsumer<ConvertBloc, ConvertState>(
          listener: (context, state) {
          //defined / accessible
          print("------- ${state.unitSystemFrom}");
          },
          builder: (context, sate) {
          //undefined / not accessible
            return Text(state.unitSystemFrom);
          },
        );
      }

小部件构建方法:

Widget build(BuildContext context) {
    return BlocBuilder<ConvertBloc, ConvertState>(
      builder: (context, sate) {
        return Text(state.unitSystemFrom);
      },
    );
  }

设置来自 bloc 的初始值事件:

class SetInitialValuesEvent extends ConvertEvent {
  final String unitSystemFrom;
  final double unitValueFrom;
  final String unitFrom;
  final String unitSystemTo;
  final double unitValueTo;
  final String unitTo;

  const SetInitialValuesEvent(
    this.unitSystemFrom,
    this.unitValueFrom,
    this.unitFrom,
    this.unitSystemTo,
    this.unitValueTo,
    this.unitTo,
  );

  @override
  List<Object?> get props => [
        unitSystemFrom,
        unitValueFrom,
        unitFrom,
        unitSystemTo,
        unitValueTo,
        unitTo
      ];
}

集团:

class ConvertBloc extends Bloc<ConvertEvent, ConvertState> {
  ConvertBloc()
      : super(const ConvertState(
            unitSystemFrom: '',
            unitValueFrom: 0,
            unitFrom: '',
            unitSystemTo: '',
            unitValueTo: 0,
            unitTo: '')) {
    on<SetInitialValuesEvent>(_onSetInitialValuesEventToState);
  }

  void _onSetInitialValuesEventToState(
      SetInitialValuesEvent event, Emitter<ConvertState> emit) {
    emit(ConvertState(unitSystemFrom: event.unitSystemFrom,
        unitValueFrom: event.unitValueFrom,
        unitFrom: event.unitFrom,
        unitSystemTo: event.unitSystemTo,
        unitValueTo: event.unitValueTo,
        unitTo: event.unitTo))
  }
}

你好像打错字了:

您在构建函数参数中使用了 sate 但尝试使用 state

访问它

像这样:

Widget build(BuildContext context) {
    return BlocBuilder<ConvertBloc, ConvertState>(
      builder: (context, sate) {
        return Text(state.unitSystemFrom);
      },
    );
  }

改用这个:

Widget build(BuildContext context) {
    return BlocBuilder<ConvertBloc, ConvertState>(
      builder: (context, state) {
        return Text(state.unitSystemFrom);
      },
    );
  }