先分清状态类型
状态管理不是越复杂越好。按钮是否展开属于局部状态,登录用户信息属于全局共享状态,购物车、订单筛选、主题设置属于业务状态。不同状态适合不同方案。
ChangeNotifier 的价值
ChangeNotifier 来自 Flutter foundation 层,不依赖 UI。它适合把业务数据和页面拆开,数据变化时调用 notifyListeners() 通知监听者刷新。
class CounterStore extends ChangeNotifier {
int value = 0;
void increment() {
value++;
notifyListeners();
}
}实践原则
- 页面局部状态:setState 就够。
- 跨组件共享:可以考虑 ChangeNotifier + Provider。
- 复杂异步状态:再考虑 Riverpod、Bloc 等方案。
- 状态类要可测试,不要强依赖 BuildContext。
不要为了“显得架构高级”把所有变量都丢进全局状态。状态范围越小,维护成本通常越低。