Flutter-Provider学习

▼魔方 西西 提交于 2020-03-01 09:56:20

使用 Provider,我们需要解决以下 3 个问题:

  • 资源(即数据状态)如何封装?
  • 资源放在哪儿,才都能访问得到?
  • 具体使用时,如何取出资源?

总结

我们既可以用 Provider 来实现静态的数据读传递,也可以使用 ChangeNotifierProvider 来实现动态的数据读写传递,还可以通过 MultiProvider 来实现多个数据资源的共享。
在具体使用数据时,Provider.of 和 Consumer 都可以实现数据的读取,并且 Consumer 还可以控制 UI 刷新的粒度,避免与数据无关的组件的无谓刷新。
可以看到,通过 Provider 来实现数据传递,无论在单个页面内还是在整个 App 之间,我们都可以很方便地实现状态管理,搞定那些通过 StatefulWidget 无法实现的场景,进而开发出简单、层次清晰、可扩展性高的应用。事实上,当我们使用 Provider 后,我们就再也不需要使用 StatefulWidget 了

相关实战代码

Consumer<GlobalModel>(
                builder: (context, _counter, child) => RaisedButton(
                  onPressed: () {
                    _counter.incresement();
                    Navigator.pop(context, "我是返回值");
                  },
                  child: child,
                ),
                child: Text("返回"),
              ),
              TestIcon()

RaisedButton(
  onPressed: () {
    _counter.incresement();
    Navigator.pop(context, "我是返回值");
  },
  child: Text("返回"),
)
Consumer<GlobalModel>(
  builder: (context, _counter, child) => RaisedButton(
    onPressed: () {
      _counter.incresement();
      Navigator.pop(context, "我是返回值");
    },
    child: child,
  ),
  child: Text("返回"),
),
而这种写法为啥就报错. 解决方案把{}改成=>
builder: (context, _counter, child) {
  RaisedButton(
    onPressed: () {
      _counter.incresement();
      Navigator.pop(context, "我是返回值");
    },
    child: child,
  )
},
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!