用途:本技能定义在 Flutter 应用中正确使用 provider 包的方式,覆盖 Provider 类型选择、状态消费、重建优化、ProxyProvider 与迁移。
主要能力:Provider 用于暴露不可变值;ChangeNotifierProvider 用于带 ChangeNotifier 的可变状态;FutureProvider 暴露 Future 结果;StreamProvider 暴露 Stream;ProxyProvider / ChangeNotifierProxyProvider 用于依赖其他 provider 的对象。
使用方式:用 MultiProvider 分组多个 provider,避免深层嵌套;ChangeNotifierProvider 会在不再需要时自动释放模型。消费状态时始终指定泛型以保证类型安全:context.watch 监听并重建(仅限 build 或 provider 的 update 方法内),context.read 不监听(用于回调,不在 build 内),context.select 只监听部分状态。需要细粒度重建且无法访问后代 BuildContext 时,使用 Consumer<T> 或 Selector<T, R>。ProxyProvider 示例:Provider<Auth> 配合 ProxyProvider<Auth, Api> 的 update 回调。
限制与规则:不要用会随时间变化的变量创建 provider 对象,否则对象不会更新,应改用 ProxyProvider。若 provider 超过 150 个,考虑随时间挂载(如启动屏期间)而非一次性全部挂载,以避免 StackOverflowError。不要在 initState 或构造函数中访问 provider,应在 build、回调或已完全挂载的生命周期方法中使用。状态可以是任意对象,不限于 ChangeNotifier;必要时配合 StatefulWidget 使用 Provider.value()。调试时可实现 toString 或 DiagnosticableTreeMixin 以改善 DevTools 显示。迁移:ValueListenableProvider 已弃用,改用 Provider 配合 ValueListenableBuilder。