Flutter Bloc 对 Blocs 初始状态的反应
Posted
技术标签:
【中文标题】Flutter Bloc 对 Blocs 初始状态的反应【英文标题】:FlutterBloc react to Blocs's initial state 【发布时间】:2021-02-12 13:18:18 【问题描述】:我怎样才能让我的集团对集团的初始状态做出反应。在示例中,我试图在集团初始状态上记录一些内容,但没有任何反应。它只打印 blocs 构造函数,但不打印 facilityIntial 的打印语句
class FacilityBloc extends Bloc<FacilityEvent, FacilityState>
FacilityBloc(this.facilityRepository)
: assert(facilityRepository != null),
super(FacilityInitial())
print('FacilitBlocConstructed');
final FacilityRepository facilityRepository;
@override
Stream<FacilityState> mapEventToState(
FacilityEvent event,
) async*
print(event);
if (event is FacilityGetAll)
yield* _mapGetAllFacilityToState(event);
else if (event is FacilityInitial)
print('Facility intial state');
Stream<FacilityState> _mapGetAllFacilityToState(FacilityGetAll event) async*
yield FacilityLoading();
try
List<Facility> facilities = await facilityRepository.loadAllFacility();
yield FacilityLoaded(facilities);
on AppException catch (e)
yield FacilityError(e.exceptionMessageId);
catch (e)
yield FacilityError(LocaleKeys.generalError);
【问题讨论】:
【参考方案1】:如果FacilityInitial
是一个状态,那么这就是您无法在mapEventToState
函数中对其做出反应的原因(在此函数中,您只能对事件做出反应,而不是对状态做出反应)。如果mapEventToState
是一个事件(我不能肯定,因为你没有提供该信息)它可能与同名的状态类冲突。
此外,您还没有提供创建 bloc 实例的代码。为了能够对事件做出反应(即使是初始事件),您需要将此事件添加到 bloc。它可能看起来像这样:
BlocProvider<FacilityBloc>(
lazy: false,
create: (context) => FacilityBloc(FacilityRepository())..add(FacilityInitialEvent()),
child: Text("My Text"),
)
在上面的例子中,我明确地添加了FacilityInitialEvent
,因此该集团能够处理它。另外,我稍微更改了事件名称,以避免名称冲突。
【讨论】:
天哪,我知道我的问题毫无意义,因为这是一个状态而不是一个事件,谢谢!以上是关于Flutter Bloc 对 Blocs 初始状态的反应的主要内容,如果未能解决你的问题,请参考以下文章
Flutter Bloc - Flutter Bloc 状态未更新