【问题标题】:Another exception was thrown: Error: Could not find the correct Provider<HState> above this BlocSelector<HCubit, HState, HState> Widget引发了另一个异常:错误:在此 BlocSelector<HCubit, HState, HState> Widget 上方找不到正确的 Provider<HState>
【发布时间】:2021-11-16 22:09:08
【问题描述】:

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

抛出了另一个异常:错误:在此 BlocSelector Widget 上方找不到正确的 Provider

文本表单域代码为:

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;
}

【问题讨论】:

    标签: flutter bloc flutter-bloc freezed flutter-freezed


    【解决方案1】:

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

    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-12-19
      • 2021-04-29
      • 2021-09-29
      • 2023-04-01
      • 1970-01-01
      • 2021-02-07
      • 2021-09-15
      • 2021-02-04
      • 2021-01-31
      相关资源
      最近更新 更多