状态管理:从 setState 到 ChangeNotifier

理解局部状态、共享状态和业务状态,使用 ChangeNotifier 做简单可测试的状态管理。

状态管理ChangeNotifier

先分清状态类型

状态管理不是越复杂越好。按钮是否展开属于局部状态,登录用户信息属于全局共享状态,购物车、订单筛选、主题设置属于业务状态。不同状态适合不同方案。

ChangeNotifier 的价值

ChangeNotifier 来自 Flutter foundation 层,不依赖 UI。它适合把业务数据和页面拆开,数据变化时调用 notifyListeners() 通知监听者刷新。

class CounterStore extends ChangeNotifier {
  int value = 0;

  void increment() {
    value++;
    notifyListeners();
  }
}

实践原则

  • 页面局部状态:setState 就够。
  • 跨组件共享:可以考虑 ChangeNotifier + Provider。
  • 复杂异步状态:再考虑 Riverpod、Bloc 等方案。
  • 状态类要可测试,不要强依赖 BuildContext。
不要为了“显得架构高级”把所有变量都丢进全局状态。状态范围越小,维护成本通常越低。

官方参考