当前位置:网站首页>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 .
边栏推荐
- MIT6.S081-Lab9 FS [2021Fall]
- OpenGL super classic learning notes (1) the first triangle "suggestions collection"
- EasyCVR配置中心录像计划页面调整分辨率时的显示优化
- 解决uni-app中uni.request发送POST请求没有反应。
- The cyberspace office announced the measures for data exit security assessment, which will come into force on September 1
- [开源] .Net ORM 访问 Firebird 数据库
- 双塔模型的最强出装,谷歌又开始玩起“老古董”了?
- Addition, deletion, modification and query of sqlhelper
- The strongest installation of the twin tower model, Google is playing "antique" again?
- Develop those things: go plus c.free to free memory, and what are the reasons for compilation errors?
猜你喜欢
Wechat official account oauth2.0 authorizes login and displays user information
South China x99 platform chicken blood tutorial
2022 how to evaluate and select low code development platforms?
TCP/IP 协议栈
Default constraint and zero fill constraint of MySQL constraint
operator
海外代理推荐
Ad domain group policy management
cv2.resize函数报错:error: (-215:Assertion failed) func != 0 in function ‘cv::hal::resize‘
Dry goods sharing | devaxpress v22.1 original help document download collection
随机推荐
Solve the problem of uni in uni app Request sent a post request without response.
Restore backup data on persistent volumes
NVR硬盤錄像機通過國標GB28181協議接入EasyCVR,設備通道信息不顯示是什麼原因?
Jerry's initiation of ear pairing, reconnection, and opening of discoverable and connectable cyclic functions [chapter]
Ten thousand word summary data storage, three knowledge points
反爬通杀神器
Awk processing JSON processing
How can big state-owned banks break the anti fraud dilemma?
MIT6.S081-Lab9 FS [2021Fall]
Demon daddy C
Can I open a stock account directly online now? Is it safe?
使用 BlocConsumer 同时构建响应式组件和监听状态
Tcp/ip protocol stack
How does win11 time display the day of the week? How does win11 display the day of the week today?
How much does it cost to develop a small program mall?
UVA 12230 – crossing rivers (probability) "suggested collection"
The difference between NPM uninstall and RM direct deletion
Validutil, "Rethinking the setting of semi supervised learning on graphs"
大数据开源项目,一站式全自动化全生命周期运维管家ChengYing(承影)走向何方?
Win11如何解禁键盘?Win11解禁键盘的方法