当前位置:网站首页>Use blocconsumer to build responsive components and monitor status at the same time
Use blocconsumer to build responsive components and monitor status at the same time
2022-07-07 22:00:00 【Ma Nong @ official account on the island with the same name】
Preface
In the last article Flutter Introduction and actual combat ( eighty-nine ): Use BlocListener Processing state changes , We used BlocListener Monitor the state changes and do some corresponding processing , At the same time BlocBuilder Build a responsive interface . Review the code , We will find that there are redundant parts , We need to BlocBuilder As BlocListener The child components , It's actually a little awkward , because BlocBuilder The built page should not be BlocListener The child components , It's a peer structure . Is there a better way to solve this problem , in fact ,flutter_bloc given BlocConsumer To solve this problem .
BlocConsumer Implementation mechanism
BlocConsumer Like BlocBuilder and BlocListener Aggregate component of , Support building responsive components while listening for state changes . At the same time, it also supports refreshing components according to conditions or listening callback in response to state changes .BlocConsumer The construction method of is as follows :
const BlocConsumer({
Key? key,
required this.builder,
required this.listener,
this.bloc,
this.buildWhen,
this.listenWhen,
}) : super(key: key);
The parameters are as follows :
builder: Responsive component construction method , andBlocBuilderIn the same .listener: Status change processing listening callback function , andBlocListenerThe definitions are the same .bloc: OptionalBlocState object , If not specified , Automatically from the currentBuildContextFind the corresponding type of status object in .buildWhen: Optional parameters , Status objects before and after receiving , You can return... According to the previous and subsequent status objectsboolvalue , iftrueWill refresh the component .listenWhen: Optional parameters , Status objects before and after receiving , You can return... According to the previous and subsequent status objectsboolvalue , iftrueWill calllistenerThe callback method .
Look again. BlocConsumer Of builder Method :
@override
Widget build(BuildContext context) {
if (widget.bloc == null) context.select<B, int>(identityHashCode);
return BlocBuilder<B, S>(
bloc: _bloc,
builder: widget.builder,
buildWhen: (previous, current) {
if (widget.listenWhen?.call(previous, current) ?? true) {
widget.listener(context, current);
}
return widget.buildWhen?.call(previous, current) ?? true;
},
);
}
You can see , The actual implementation is based on BlocBuilder Realization , And in the BlocBuilder Of builderWhen in , Will be based on listenWhen To determine whether to call listener The callback method , So that BlocBuilder and BlocListener The aggregation of .
BlocConsumer application
We modified the code of the previous article , Then take a look at the comparison of the two parts of the code , As shown in the figure below .

You can see , The number of lines of code has not changed much , But the hierarchy of the whole code will be clearer , This makes the code easier to maintain , The complete code has been uploaded to :BLoC Status management code .
summary
This article introduces BlocConsumer Implementation mechanism , And compared BlocBuilder and BlocListener Differences in separate implementations . Through comparison, we can see ,BlocConsumer This kind of aggregation BlocBuilder and BlocListener In this scenario, the code level is clearer , It's also easy to maintain . 
边栏推荐
- [open source] Net ORM accessing Firebird database
- Time standard library
- npm uninstall和rm直接删除的区别
- Demon daddy C
- Demon daddy A3 stage near normal speed speech flow initial contact
- How to turn on win11 game mode? How to turn on game mode in win11
- Jerry's fast pairing does not support canceling pairing [article]
- Use camunda to do workflow design and reject operations
- Jerry's configuration of TWS cross pairing [article]
- UVA 12230 – crossing rivers (probability) "suggested collection"
猜你喜欢

The function is really powerful!

The little money made by the program ape is a P!

It's worth seeing. Interview sites and interview skills

反爬通杀神器
![[open source] Net ORM accessing Firebird database](/img/a2/4eff4f0af53bf3b9839a73019a212f.png)
[open source] Net ORM accessing Firebird database

Focusing on safety in 1995, Volvo will focus on safety in the field of intelligent driving and electrification in the future
Talk about relational database and serverless
Default constraint and zero fill constraint of MySQL constraint

你可曾迷茫?曾经的测试/开发程序员,懵懂的小菜C鸟升级......

Validutil, "Rethinking the setting of semi supervised learning on graphs"
随机推荐
NVR硬盘录像机通过国标GB28181协议接入EasyCVR,设备通道信息不显示是什么原因?
双塔模型的最强出装,谷歌又开始玩起“老古董”了?
Tsconfig of typescript TS basics JSON configuration options
Reptile combat (VII): pictures of the king of reptiles' heroes
Preparing for the interview and sharing experience
Static test tool
Reinforcement learning - learning notes 9 | multi step TD target
Dry goods sharing | devaxpress v22.1 original help document download collection
How does win11 unblock the keyboard? Method of unlocking keyboard in win11
Talk about relational database and serverless
Reinforcement learning - learning notes 9 | multi step TD target
Deadlock conditions and preventive treatment [easy to understand]
Two kinds of updates lost and Solutions
Programming mode - table driven programming
Devil daddy A0 English zero foundation self-improvement Road
[colmap] sparse reconstruction is converted to mvsnet format input
[open source] Net ORM accessing Firebird database
UVA 11080 – place the guards
201215-03-19 - cocos2dx memory management - specific explanation "recommended collection"
Awk processing JSON processing