Я использую провайдера и 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 является плохой комбинацией ?