Provider и flutter_blo c setState () или markNeedsBuild (), вызываемые во время сборки - PullRequest
0 голосов
/ 22 января 2020

Я использую провайдера и flutter_blu c в моем приложении. Прямо сейчас я борюсь с этим случаем: новое состояние передается BlocBuilder, который перестраивает часть интерфейса дерева виджетов. Я хочу также обновить мой bottomNavigationVisibility, который расширяет ChangeNotifier. Я использую этот bottomNavigationVisibility для обновления другой части дерева виджетов.

Таким образом, я мог бы легко добиться хорошего разделения логики c для моего UIViews ИМХО. Однако сейчас я всегда получаю эту ошибку:

setState () или markNeedsBuild () вызывается во время сборки.

Вот примеры кода:

  @override
  Widget build(BuildContext context) {
    final bottomNavigationVisibility =
        Provider.of<ProviderBottomNavigation>(context);
    ...
 Container(
                height: 60.0,
                child: BlocBuilder<SoundsblocBloc, SoundsblocState>(
                    condition: (previousState, state) {
                  if (previousState is InitialSoundsblocLoading) return true;
                  return false;
                }, builder: (context, state) {
                  if (state is InitialSoundsblocLoaded) {
                    if (state.sounds
                        .where((sound) => sound.focused)
                        .toList()
                        .isEmpty) {

                      bottomNavigationVisibility.isVisibleT(false);
                    } else {
                      bottomNavigationVisibility.isVisibleT(true);
                    }
                  }

                  return ListView.builder(
                      itemCount: listOfSounds.length,
                      ...
                })),

class ProviderBottomNavigation extends ChangeNotifier {
  bool _isVisible = false;

  bool get isVisible => _isVisible;

  void isVisibleT(bool val) {
    _isVisible = val;
    notifyListeners();
  }
}

Как мне изменить мой код для обновления моего ChangeNotifier из виджета A, который наблюдается в виджете B, после возвращения определенного состояния blo c?

Кроме того, могу ли я ошибаться, и использование провайдера для отдельных частей пользовательского интерфейса с flutter_blo c является плохой комбинацией ?

...