2019-07-01
作为一个状态共享的解决方案,不复杂,好理解,代码量不大的情况下,可以方便组合和控制刷新颗粒度 , 而原 Google 官方仓库的状态管理 flutter-provide 已宣告GG , provider 成了它的替代品。和scoped_moded
比起来,入侵性比较小,也适合比较复杂的应用场景。
具体的代码在 https://github.com/huangyuanlove/test_flutter/tree/master/lib/provider
添加依赖
在pubspec.yaml中添加provider镜像:具体版本号可以在https://pub.dev/packages/provider#-installing-tab-
查看
dependencies:
flutter:
sdk: flutter
# The following adds the Cupertino Icons font to your application.
# Use with the CupertinoIcons class for iOS style icons.
cupertino_icons: ^0.1.2
provider: ^3.0.0+1
dev_dependencies:
flutter_test:
sdk: flutter
创建数据model
import 'package:flutter/material.dart';
class CounterModel with ChangeNotifier{
int _count = 0;
int get value => _count;
void increment(){
_count ++;
notifyListeners();
}
}
这里使用了 mixin 混入了 ChangeNotifier
,这个类能够帮驻我们自动管理所有听众。当调用notifyListeners()
时,它会通知所有听众进行刷新。
为了能更加直观的看到每个widget的build过程,做个包装的widget,不是依靠debugPrintLayouts = true;
import 'package:flutter/material.dart';
class TestTextWidget extends StatelessWidget{
TestTextWidget({
@required this.logTag,@required this.child});
final String logTag;
final Widget child;
@override
Widget build(BuildContext context) {
print(logTag);
return child;
}
}
在每次build的时候打印一下日志,并且在源码的text.dart
中的build方法打印了一下内容print("Text build:${data}");
如何传递、共享数据
向子节点传递数据
我们在主页中加个按钮,点击后进入计数界面
import 'package:provid