当前位置:网站首页>BlocProvider 为什么感觉和 Provider 很相似?
BlocProvider 为什么感觉和 Provider 很相似?
2022-07-01 21:38:00 【InfoQ】
前言
SimpleBlocProvider
Bloc
BlocProvider
Provider 的模仿者?
BlocProvider
class 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),
),
);
}
}
Provider
Widget build(BuildContext context) {
return BlocProvider(
create: (_) => CounterCubit(),
child: BlocCounterPage(),
);
}
Provider
Widget build(BuildContext context) {
return Provider(
create: (_) => CounterCubit(),
child: BlocCounterPage(),
);
}
FloatingActionButton
context.read
Provider
Provider
library flutter_bloc;
export 'package:bloc/bloc.dart';
export 'package:provider/provider.dart'
show ProviderNotFoundException, ReadContext, SelectContext, WatchContext;
Provider
bloc
Provider


与 Provider 的异同
BlocProvider
Provider
Provider
BlocProvider
Provider
value
final counter = CounterCubit();
//...
BlocProvider.value(
value: counter,
child: SomeWidget(),
);
context.read
context.watch
final isPositive = context.select((CounterBloc b) => b.state >= 0);
MultiBlocProvider
MultiBlocProvider(
providers: [
BlocProvider<BlocA>(
create: (BuildContext context) => BlocA(),
),
BlocProvider<BlocB>(
create: (BuildContext context) => BlocB(),
),
BlocProvider<BlocC>(
create: (BuildContext context) => BlocC(),
),
],
child: ChildA(),
)
Provider
BlocProvider
BlocProvider
Provider
ChangeNotifier
notifyListeners
BlocProvider
SimpleBlocProvider
Stream.listen
static VoidCallback _startListening(
InheritedContext<BlocBase?> e,
BlocBase value,
) {
final subscription = value.stream.listen(
(dynamic _) => e.markNeedsNotifyDependents(),
);
return subscription.cancel;
}
Provider
BlocProvider
Stream.listen
ChangeNotifer
Provider
Provider
BlocProvider
notifyListeners
总结
BlocProvider
Provider
BlocProvider
Provider

边栏推荐
- Halcon知识:三维重构的一个尝试
- idea中类中显示成员变量和方法
- 杰理之关于长按开机检测抬起问题【篇】
- leetcode刷题:栈与队列03(有效的括号)
- 随机头像大全,多分类带历史记录微信小程序源码_支持流量主
- 面试题:MySQL的union all和union有什么区别、MySQL有哪几种join方式(阿里面试题)[通俗易懂]
- CNN卷积神经网络原理讲解+图片识别应用(附源码)[通俗易懂]
- Significance and measures of security encryption of industrial control equipment
- 杰理之、产线装配环节【篇】
- 芭比Q了!新上架的游戏APP,咋分析?
猜你喜欢
随机推荐
An operation tool used by we media professionals who earn 1w+ a month
Significance and measures of security encryption of industrial control equipment
【STM32】STM32CubeMX教程二–基本使用(新建工程点亮LED灯)
AirServer手机第三方投屏电脑软件
Manually implement function isinstanceof (child, parent)
PCB plug hole technology~
[NOIP2013]积木大赛 [NOIP2018]道路铺设 贪心/差分
《QTreeView+QAbstractItemModel自定义模型》:系列教程之三[通俗易懂]
Introduction à l'ingénierie logicielle (sixième édition) notes d'examen de Zhang haifan
芭比Q了!新上架的游戏APP,咋分析?
There are four ways to write switch, you know
柒微自动发卡系统源码
手动实现function isInstanceOf(child,Parent)
TOPS,处理器运算能力单位、每秒钟可进行一万亿次
杰理之烧录上层版物料需要【篇】
【opencv】train&test HOG+SVM
burpsuite简单抓包教程[通俗易懂]
JS how to get a list of elements in a collection object
深度学习 神经网络基础
杰理之蓝牙耳机品控和生产技巧【篇】