Flutter provider状态管理框架

 官方解释:

依赖项注入(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的人把事情复杂化了,说了很多很多。这样是不利于新人入手。希望可以帮到一些人...

效果图

完整代码

查看完整代码

发布了86 篇原创文章 · 获赞 166 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/ruoshui_t/article/details/102723339