关于 riverpod-eager-initialization
riverpod-eager-initialization 介绍如何在 Flutter 应用的 ProviderScope 下监听 Riverpod provider,以提前初始化。内容涵盖减少应用子树重建、处理异步加载与错误,以及在测试中复用初始化设置。
主要功能
- 01在应用根部监听 providers
- 02将应用子树作为 child 保留
- 03处理异步加载与错误
- 04在测试中复用初始化设置
适用场景
- 01在应用启动时初始化指定 provider
- 02显示异步 provider 的就绪状态
- 03让测试复用应用初始化设置
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ serverpod/ skills-registry --skill riverpod-eager-initialization安装后在 Claude Code 中输入/riverpod-eager-initialization确认已加载。
详细介绍
Riverpod — 预先初始化
说明
Provider 默认是惰性的:首次使用时才会初始化。为支持树摇优化,没有内置的“急切”标记。若要强制提前初始化,请在应用根部 watch 该 Provider,使其保持存活并立即运行。
方法
在 ProviderScope 下直接放置一个 Consumer(或 ConsumerWidget),只 watch 你想初始化的 Provider,并将实际应用作为 child 返回:
void main() {
runApp(ProviderScope(child: MyApp()));
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return const _EagerInitialization(child: MaterialApp());
}
}
class _EagerInitialization extends ConsumerWidget {
const _EagerInitialization({required this.child});
final Widget child;
@override
Widget build(BuildContext context, WidgetRef ref) {
ref.watch(myProvider); // Eagerly initialize
return child;
}
}
Provider 发生变化时,只有初始化器 Widget 会重建;child 保持不变,因此除非树中的其他部分在监听,否则 Flutter 不会重建树的其余部分。
异步:加载与错误
如果 Provider 是异步的,请在初始化器中处理加载和错误状态(例如,显示 CircularProgressIndicator 或错误信息,直到准备就绪,然后返回 child)。其他 Widget 可以使用 AsyncValue.requireValue 读取数据,而无需进行模式匹配;如果在值准备就绪前运行,它会抛出一条清晰的消息。
将初始化器放在共享 Widget(例如 MyApp)中,这样测试就可以通过使用该 Widget 复用相同的设置。
评论
支持 Markdown