0

我在freezd上使用cubit。我在底部表格中有一个输入文本表单字段,一切都很完美,但是一旦我单击输入表单字段并输入任何字母,就会发生此异常。

引发了另一个异常:错误:在此 BlocSelector<HCubit, HState, HState> Widget 上方找不到正确的提供程序

文本表单域代码是:

class TextInput extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    TextEditingController _textEditingController = TextEditingController();
    return BlocSelector<HCubit, HState, String?>(
        selector: (state) {
          return state.maybeMap(
              orElse: () {},
              inputTextValue: (val) =>
                  val.inputTextValue.input.fold((l) => l.msg, (r) => null));
        },
        builder: (context, state) {
          return TextFormField(
              textAlign: TextAlign.start,
              onChanged: (String value) => context
                  .read<HState>()
                  .maybeMap(inputTextValue: (value) => value, orElse: () {}),
              validator: (String? validator) => context
                  .read<HState>()
                  .maybeWhen(
                      orElse: () {},
                      inputTextValue: (val) =>
                          val.input.fold((l) => l.msg, (r) => null)),
              );
        },
      ),
    );
  }
}

材料应用代码:

class AppWidget extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Sizer(
      builder: (context, orientation, deviceType) {
        return MaterialApp(
          BlocProvider<HCubit>(
            lazy: false,
            create: (context) => HCubit(),
            child: const
             HomePage(),
          ),
        );
      },
    );
  }
}

块代码是:

class HCubit extends Cubit<HState> {
  HCubit() : super(const HState.initial());
  void addNewNoteButton({required bool isClicked}) =>
      emit(HState.isClicked(isClicked: isClicked));

  void textInputNote({required String textNote}) =>
      emit(HState.inputTextValue(inputTextValue: Note(textInput: textNote)));
}

状态代码是:

abstract class HState with _$HState {
  const factory HState.initial() = _Initial;
  const factory HState.inputTextValue({required Note inputTextValue})=InputTextValue;
  const factory HState.isClicked({required bool isClicked})=IsClicked;
}
4

1 回答 1

0

在您的材料应用程序代码中有一个语法错误,它应该是这样的:

class AppWidget extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Sizer(
      builder: (context, orientation, deviceType) {
        return MaterialApp(
          home: BlocProvider<HCubit>(
            lazy: false,
            create: (context) => HCubit(),
            child: const
             HomePage(),
          ),
        );
      },
    );
  }
}
于 2021-10-19T16:56:25.527 回答