这一节主要介绍Flutter中一个状态管理库provider,它也是Google推荐使用的。provider是对InheritedWidget进行包装,使其更易于使用和重用。为什么需要状态管理,因为为了防止更新应用UI冲突,比如多个页面共享同一个状态,比如当你进入一个兴趣列表选择时,选择完成后,退到个人信息页时能够同步展示 兴趣的数量;
provider的使用简单理解为如下:1 创建继承自 ChangeNotifier 的共享类; 2 设置数据; 3 获取数据,两种方式,分别是Provider.of(context) 和 Consumer;
栗子:
依赖: provider: ^4.0
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return ChangeNotifierProvider<Counter>( // <=== PROVIDER
builder: (context) => Counter(),
child: MaterialApp(
title: 'Counter App - Compact',
home: Scaffold(
appBar: AppBar(
title: Text("Page Title"),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Consumer<Counter>( // <=== DEPENDENT
builder: (context, counter, child) => Text(
'${counter.count}',
style: Theme.of(context).textTheme.display1,
),
),
Builder(builder: (context) { // <=== DEPENDENT
final counter = Provider.of<Counter>(context, listen: false);
return RaisedButton(
onPressed: () => counter.increment(),
child: Text("Increment"),
);
}),
],
),
),
),
),
);
}
}
class Counter with ChangeNotifier {
int count = 0;
void increment() {
++count;
notifyListeners();
}
}
官网:provider