当前位置:网站首页>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 , andBlocBuilder
In the same .listener
: Status change processing listening callback function , andBlocListener
The definitions are the same .bloc
: OptionalBloc
State object , If not specified , Automatically from the currentBuildContext
Find 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 objectsbool
value , iftrue
Will refresh the component .listenWhen
: Optional parameters , Status objects before and after receiving , You can return... According to the previous and subsequent status objectsbool
value , iftrue
Will calllistener
The 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 .
边栏推荐
- Validutil, "Rethinking the setting of semi supervised learning on graphs"
- 双塔模型的最强出装,谷歌又开始玩起“老古董”了?
- An overview of the latest research progress of "efficient deep segmentation of labels" at Shanghai Jiaotong University, which comprehensively expounds the deep segmentation methods of unsupervised, ro
- Jerry's configuration of TWS cross pairing [article]
- [advanced MySQL] index details (I): index data page structure
- cv2.resize函数报错:error: (-215:Assertion failed) func != 0 in function ‘cv::hal::resize‘
- An in-depth understanding of fp/fn/precision/recall
- Contour layout of margin
- Leetcode SQL first day
- Codemail auto collation code of visual studio plug-in
猜你喜欢
反爬通杀神器
An overview of the latest research progress of "efficient deep segmentation of labels" at Shanghai Jiaotong University, which comprehensively expounds the deep segmentation methods of unsupervised, ro
Display optimization when the resolution of easycvr configuration center video recording plan page is adjusted
Use json Stringify() to realize deep copy, be careful, there may be a huge hole
Wechat official account oauth2.0 authorizes login and displays user information
operator
Google SEO external chain backlinks research tool recommendation
你可曾迷茫?曾经的测试/开发程序员,懵懂的小菜C鸟升级......
Jerry's initiation of ear pairing, reconnection, and opening of discoverable and connectable cyclic functions [chapter]
使用 CustomPaint 绘制基本图形
随机推荐
Deadlock conditions and preventive treatment [easy to understand]
三元表达式、各生成式、匿名函数
The function is really powerful!
Two kinds of updates lost and Solutions
Prometheus remote_ write InfluxDB,unable to parse authentication credentials,authorization failed
Ten thousand word summary data storage, three knowledge points
null == undefined
The new version of onespin 360 DV has been released, refreshing the experience of FPGA formal verification function
用语雀写文章了,功能真心强大!
Jetty: configure connector [easy to understand]
The difference between NPM uninstall and RM direct deletion
TCP/IP 协议栈
Ad domain group policy management
Open source OA development platform: contract management user manual
An in-depth understanding of fp/fn/precision/recall
DNS series (I): why does the updated DNS record not take effect?
The maximum number of meetings you can attend [greedy + priority queue]
Automatic classification of defective photovoltaic module cells in electronic images
SQL injection error report injection function graphic explanation
How does win11 time display the day of the week? How does win11 display the day of the week today?