当前位置:网站首页>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

边栏推荐
猜你喜欢
leetcode刷题:栈与队列02(用队列实现栈)
Gaussdb (for MySQL):partial result cache, which accelerates the operator by caching intermediate results
Customize the insertion of page labels and realize the initial search of similar address books
latex如何打空格
K-means based user portrait clustering model
强大的万年历微信小程序源码-支持多做流量主模式
上半年暂停考试要补考?包含监理工程师、建筑师等十项考试
喜马拉雅自研网关架构演进过程
PMP证书真的有用吗?
Vulnerability recurrence - Net ueeditor upload
随机推荐
柒微自动发卡系统源码
leetcode刷题:二叉树03(二叉树的后序遍历)
Target detection - Yolo series
2022安全员-B证考试练习题模拟考试平台操作
运放-滞回(迟滞)比较器全流程实战计算
【Opencv450】HOG+SVM 与Hog+cascade进行行人检测
选择在同花顺上炒股开户可以吗?安全吗?
Introduction à l'ingénierie logicielle (sixième édition) notes d'examen de Zhang haifan
2022年高处安装、维护、拆除考题模拟考试平台操作
《QTreeView+QAbstractItemModel自定义模型》:系列教程之三[通俗易懂]
Spark面试题
基于YOLOv5的口罩佩戴检测方法
PWN攻防世界cgpwn2
burpsuite简单抓包教程[通俗易懂]
工控设备安全加密的意义和措施
强大的万年历微信小程序源码-支持多做流量主模式
杰理之、产线装配环节【篇】
物联网rfid等
Customize the insertion of page labels and realize the initial search of similar address books
测试撤销1