当前位置:网站首页>BlocProvider 为什么感觉和 Provider 很相似?
BlocProvider 为什么感觉和 Provider 很相似?
2022-07-01 21:38:00 【InfoQ】
前言
SimpleBlocProviderBlocBlocProviderProvider 的模仿者?
BlocProviderclass BlocCounterWrapper extends StatelessWidget {
@override
Widget build(BuildContext context) {
return BlocProvider(
create: (_) => CounterCubit(),
child: BlocCounterPage(),
);
}
}
class BlocCounterPage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Bloc 计数器'),
),
body: Center(
child: BlocBuilder<CounterCubit, int>(
builder: (context, count) => Text(
'$count',
style: TextStyle(
fontSize: 32,
color: Colors.blue,
),
),
),
),
floatingActionButton: FloatingActionButton(
onPressed: () {
context.read<CounterCubit>().increment();
},
tooltip: '点击增加',
child: Icon(Icons.add),
),
);
}
}
ProviderWidget build(BuildContext context) {
return BlocProvider(
create: (_) => CounterCubit(),
child: BlocCounterPage(),
);
}
ProviderWidget build(BuildContext context) {
return Provider(
create: (_) => CounterCubit(),
child: BlocCounterPage(),
);
}
FloatingActionButtoncontext.readProviderProviderlibrary flutter_bloc;
export 'package:bloc/bloc.dart';
export 'package:provider/provider.dart'
show ProviderNotFoundException, ReadContext, SelectContext, WatchContext;
ProviderblocProvider

与 Provider 的异同
BlocProviderProviderProviderBlocProviderProvidervaluefinal counter = CounterCubit();
//...
BlocProvider.value(
value: counter,
child: SomeWidget(),
);
context.readcontext.watchfinal isPositive = context.select((CounterBloc b) => b.state >= 0);
MultiBlocProviderMultiBlocProvider(
providers: [
BlocProvider<BlocA>(
create: (BuildContext context) => BlocA(),
),
BlocProvider<BlocB>(
create: (BuildContext context) => BlocB(),
),
BlocProvider<BlocC>(
create: (BuildContext context) => BlocC(),
),
],
child: ChildA(),
)
ProviderBlocProviderBlocProviderProviderChangeNotifiernotifyListenersBlocProviderSimpleBlocProviderStream.listenstatic VoidCallback _startListening(
InheritedContext<BlocBase?> e,
BlocBase value,
) {
final subscription = value.stream.listen(
(dynamic _) => e.markNeedsNotifyDependents(),
);
return subscription.cancel;
}
ProviderBlocProviderStream.listenChangeNotiferProviderProviderBlocProvidernotifyListeners总结
BlocProviderProviderBlocProviderProvider
边栏推荐
猜你喜欢

Significance and measures of security encryption of industrial control equipment

合成大西瓜小游戏微信小程序源码/微信游戏小程序源码

Gaussdb (for MySQL):partial result cache, which accelerates the operator by caching intermediate results

喜马拉雅自研网关架构演进过程

杰理之、产线装配环节【篇】

Target detection - Yolo series

leetcode刷题:栈与队列07(滑动窗口最大值)

函数基本学习之一

Flume面试题

【智能QbD风险评估工具】上海道宁为您带来LeanQbD介绍、试用、教程
随机推荐
辅音和声母的区别?(声母与辅音的区别)
上半年暂停考试要补考?包含监理工程师、建筑师等十项考试
PCB plug hole technology~
PHP 读取ini或env类型配置
【opencv】train&test HOG+SVM
MQ学习笔记
芭比Q了!新上架的游戏APP,咋分析?
Flume面试题
柒微自动发卡系统源码
JS how to get a list of elements in a collection object
杰理之蓝牙耳机品控和生产技巧【篇】
最近公共祖先离线做法(tarjan)
薛定谔的日语学习小程序源码
面试题:MySQL的union all和union有什么区别、MySQL有哪几种join方式(阿里面试题)[通俗易懂]
Significance and measures of security encryption of industrial control equipment
新版图解网络PDF即将发布
Oracle deadlock test
三菱PLC FX3U脉冲轴点动功能块(MC_Jog)
同花顺股票开户选哪个券商好手机开户是安全么?
王者战力查询改名工具箱小程序源码-带流量主激励广告