官方解释:
依赖项注入(DI)和状态管理之间的混合,使用用于小部件的小部件构建。
它故意将小部件用于DI /状态管理,而不是仅使用dart类Stream。原因是,小部件非常简单,但功能强大且可扩展。
通过使用小部件进行状态管理,provider可以保证:
通过强制的单向数据流实现可维护性
可测试性/可组合性,因为始终可以模拟/覆盖值
健壮性,因为很难忘记处理模型/小部件的更新方案
目录
步骤一
步骤二
步骤三
步骤一
创建一个类,with一个ChangeNotifier,如:
//创建一个代理 它完成两个动作:1改变数据; 2刷新数据。
class MyChangeNotifier with ChangeNotifier {
int _count = 15;
int get count => _count;
// 数据加操作
void add() {
if(_count < 100){
_count++;
notifyListeners();
}
}
// 数据减操作
void sub() {
if(_count > 5){
_count--;
notifyListeners();
}
}
}
MyChangeNotifier类可看作是一个代理,改变数据与刷新页面都由此类完成。
步骤二
在runApp函数的根节点添加Provider(状态管理员),我直接使用MultiProvider(可以同时管理多个Provider)。
当然,你需要在状态树的 基层种添加,必须是能响整个状态树的地方。
void main() => runApp(ProviderDemoFirst());
class ProviderDemoFirst extends StatelessWidget {
@override
Widget build(BuildContext context) {
// 将多个提供者合并到单个线性小部件树中的提供者。它用于提高可读性,并减少必须嵌套多层提供程序的样板代码。
return MultiProvider(
providers: <SingleChildCloneableWidget>[
//用于ChangeNotifier的ListenableProvider的规范。它将ChangeNotifier.dispose在需要时自动调用。
ChangeNotifierProvider(builder: (_) => MyChangeNotifier()),
],
// 添加 观众
child: Consumer<MyChangeNotifier>(
builder:(context, counter, _) {
return MaterialApp(
home: MyHome(),
);
},
),
);
}
}
以上两步就已经完成了状态管理的布置。
步骤三
改变数据
//add() 是MyChangeNotifier类种的方法
Provider.of<MyChangeNotifier>(context, listen: false).add();
获取数据
//获取数据
final myChangeNotifier = Provider.of<MyChangeNotifier>(context);
//结果
myChangeNotifier.count
关于 Flutter provider状态管理框架 的简单介绍到此位置。
我为什么要写这篇文章呢,原因是网上很多介绍provider的人把事情复杂化了,说了很多很多。这样是不利于新人入手。希望可以帮到一些人...
效果图
完整代码
查看完整代码
————————————————
版权声明:本文为CSDN博主「马志武」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/ruoshui_t/article/details/102723339