2019.9.20 状态管理的使用。
今天要介绍的是provider,,,谷歌自己提供的管理状态的插件。今天学习了下,还是很nice的。
目前使用的provider是这个版本的:
provider: ^3.1.0
案例:
以一个简单的例子来解释下怎么弄的吧。
假如有一个展示数字的widget,还有一个按钮,点击按钮数字自动增加
----- 分割线、、
1:以下是页面显示的代码
class ShowNum extends StatelessWidget { @override Widget build(BuildContext context) { // TODO: implement build return Container( margin: EdgeInsets.only(top: 150), child: Text( '${Provider.of<Counter>(context).getCount}', // 数据的自动更新 style: TextStyle(fontSize: 24), ), ); } } class ClickBtn extends StatelessWidget { @override Widget build(BuildContext context) { // TODO: implement build return Container( margin: EdgeInsets.only(top: 40), child: RaisedButton( onPressed: () { Provider.of<Counter>(context).add(); // 点击事件处理。 }, child: Text( '按钮+', style: TextStyle(fontSize: 18), ), ), ); } }
2:需要新建文件来处理增加的逻辑。
import 'package:flutter/material.dart'; // ChangeNotifier 改变的通知 class Counter with ChangeNotifier { // 1:改变的通知 int _count = 0; Counter(this._count); add() { _count ++; print(_count); notifyListeners(); // 2:通知听众值改变了,需要刷新页面 } get getCount => _count; // 3:get方法 }
3 :需要在顶层监听整个通知。
此处一共监听了两个不同地方的状态,然后例子中使用的是第一个状态。
// 有多个状态需要管理的时候 void main() { runApp(MultiProvider( providers: [ ChangeNotifierProvider<Counter>.value(value: Counter(10)), // 状态1 ChangeNotifierProvider<Chooser>.value(value: Chooser(6)), // 状态2 ], child: MyApp(), )); }
当点击按钮的时候数字就会自动增加了,
然后整个页面和逻辑都是分开的。基本上就算是达到解耦的目的了,