目录
2.使用ChangeNotifierProvider提供状态
前言
上篇文章中,我们大致了解下Provider的优点和缺点,这篇博客主要介绍Provider中的四大核心Provider中的ChangeNotifierProvider。
一、什么是ChangeNotifierProvider?
ChangeNotifierProvider 是 Provider 包中用于提供 ChangeNotifier 类型对象给子 widget 树的组件。
它的核心功能是:将状态对象注入到widget树中,供后续获取与监听更新。
它的两个职责:
持有一个 ChangeNotifier 状态对象
自动管理它的生命周期(创建、释放)
二、ChangeNotifier的简单用法
1.定义状态类
我们首先定义我们的数据模型,这个数据模型继承自ChangeNotifier。
class Counter with ChangeNotifier {
int _count = 0;
int get count => _count;
void increment() {
_count++;
notifyListeners(); // 通知 UI 更新
}
}
2.使用ChangeNotifierProvider提供状态
void main() {
runApp(
ChangeNotifierProvider(
create: (context) => Counter(),
child: const MyApp(),
),
);
}
3.获取状态并监听更新
ChangeNotifierProvider有两种方式获取状态分别是Consumer和API方式获取状态。
1.Consumer
class MyHomePage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Consumer<Counter>(
builder: (context, counter, _) => Column(
children: [
Text('Count: ${counter.count}'),
ElevatedButton(
onPressed: counter.increment,
child: Text('Increment'),
),
],
),
);
}
}
2.通过API方式获取
除了上面的Consumer的方式获取Widget的状态之外,还可以通过下面的API实时获取Widget的状态。
1.Provider.of<T>(context)
我们可以通过Provider.of<T>(context)获取Widget的状态。
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'consumer.dart';
class ChangeNotifierProviderDemoPage extends StatelessWidget {
final String title;
const ChangeNotifierProviderDemoPage({super.key, required this.title});
@override
Wid