mcpField
R
riverpod-eager-initialization

riverpod-eager-initialization

github.com/serverpod开发1074 次安装34 周前更新
代码仓库

关于 riverpod-eager-initialization

riverpod-eager-initialization 介绍如何在 Flutter 应用的 ProviderScope 下监听 Riverpod provider,以提前初始化。内容涵盖减少应用子树重建、处理异步加载与错误,以及在测试中复用初始化设置。

主要功能

  1. 01在应用根部监听 providers
  2. 02将应用子树作为 child 保留
  3. 03处理异步加载与错误
  4. 04在测试中复用初始化设置

适用场景

  1. 01在应用启动时初始化指定 provider
  2. 02显示异步 provider 的就绪状态
  3. 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