#flutter #dart #setstate #bloc
#flutter #dart #setstate #блок
Вопрос:
Я вызываю setState в flutter BlocListener. есть ли какие-либо проблемы с этим?
....
return BlocListener<XBloc, XState>(
listener: (context, state) {
if (state is XLoadedState) {
setState(() {
name = state.name;
});
}....
....
Комментарии:
1. Это не проблема, но зачем вам это делать? Зачем иметь состояние вне вашего блока, которое является копией вашего состояния внутри блока?
2. @nvoigt что, если у меня есть три отдельных списка на одном экране, и данные для этих трех списков будут доступны из одного источника (базы данных / службы). Мне нужно показать пустое состояние во время загрузки данных для этих списков. В этом случае не было бы разумно вызвать setState в BlocListener, поскольку необходимо обновить весь экран и будут показаны загруженные данные?
Ответ №1:
Это не проблема, но это своего рода бесполезный и анти-шаблон. И с помощью setState
вы заставляете все перестраиваться, даже если в этом нет необходимости.
Вы могли бы просто обернуть виджет, который использует name
BlocBuilder<XBloc,XState>
, например, так:
BlocBuilder<XBloc,XState>(
builder: (context, state){
if (state is XLoadedState){
return Text(state.name);
}else{
//return something for when state.name is null, I guess
}
}
)
Подробнее об этом можно узнать здесь