用途:解决 Riverpod provider 默认惰性初始化(首次使用时才初始化)的问题,让指定 provider 在应用启动时立即初始化。资料指出没有内置的“eager”标志(为便于 tree-shaking)。
主要能力:在 ProviderScope 下、真实应用之上放置一个只 watch 目标 provider 的 Consumer(或 ConsumerWidget)作为初始化器,并让它返回真实应用作为 child。这样目标 provider 会被立即运行并保持存活。当 provider 变化时,只有初始化器 widget 会重建;child 不变,因此 Flutter 不会重建其余树,除非有其他监听者。
必要用法:main 中 runApp(ProviderScope(child: MyApp()))。MyApp 内返回 _EagerInitialization(child: MaterialApp())。_EagerInitialization 继承 ConsumerWidget,在 build 中 ref.watch(myProvider) 以急切初始化,然后返回 child。
异步处理:若 provider 是异步的,需在初始化器中处理 loading 与 error(例如未就绪时显示 CircularProgressIndicator 或错误,就绪后再返回 child)。其他 widget 可用 AsyncValue.requireValue 直接读取数据、无需模式匹配;若在值就绪前调用会抛出带清晰信息的异常。
适用场景与限制:适合需要在启动阶段完成初始化的 provider。建议把初始化器放进共享 widget(如 MyApp),以便测试复用同一套设置。资料未提供更多平台、版本或性能方面的说明。