genisgo / rdart

0 stars 0 forks source link

Problem updating the state when Blocbuilder is wrapped by Column #3

Open genisgo opened 5 months ago

genisgo commented 5 months ago

When you try to update the state of the child widget ChapterTableView with the setState() function, after that the bloc.add(GetAllchapitreEvent()) no longer updates the Blocbuilder


class ChapitreAccordionItemBody extends Rview {
  ChapitreAccordionItemBody();
  List<Chapitre> chapitres = [];
  ChapitreBloc bloc = getIt<ChapitreBloc>();
  @override
  void initState() {
    bloc.add(GetAllchapitreEvent());
  }

  @override
  Relement build() {
    return  Column(singleBootStrap: true, bootstrap: [], children: [
      BlocBuilder<ChapitreBloc, ChapitreState>(
        bloc: bloc,
        builder: (state) {
          return switch (state) {
            ChapitreLoaded() => ChapitreTableView(
                chapitres: state.list,
                onActualise: () {
                  bloc.add(GetAllchapitreEvent());
                },
              ),
            ChapitreLoadingError() => _errorBuild(state),
            _ => BsSpinner(),
          };
        },
      )
    ]);
  }

  _errorBuild(ChapitreLoadingError state) {
    return ErrorInfo(
        message: state.message,
        child: ErrorInfo(
          message: state.message,
          child: SizeBox(),
          reset: () {},
        ));
  }
}
genisgo commented 5 months ago

Solution de contournement avant la résolution du problème

Mettre le Blocbuilder comme premier élément dans la fonction build de ChapitreAccordionItemBody.

 @override
  Relement build() {
    return BlocBuilder<ChapitreBloc, ChapitreState>(
      bloc: bloc,
      builder: (state) {
        return switch (state) {
          ChapitreLoaded() =>
            Column(singleBootStrap: true, bootstrap: [], children: [
              ChapitreTableView(
                chapitres: state.list,
                onActualise: () {
                  bloc.add(GetAllchapitreEvent());
                },
              )
            ]),
          ChapitreLoadingError() => _errorBuild(state),
          _ => BsSpinner(),
        };
      },
    );
  }