SuperAPI AI 工具集

riverpod-family

编程与开发

查看项目

更新于 10-16 01:26

技能介绍

用途:family 让单个 provider 拥有多个相互独立的状态,相当于从参数到状态的映射,适合依赖 ID、查询词或页码的 API 调用。

主要能力:函数式 provider 通过 .family 增加一个参数类型,provider 函数接收 (ref, param);代码生成时给函数加参数,生成的 provider 接受参数调用,如 userProvider(id)。Notifier 场景使用 NotifierProvider.family / AsyncNotifierProvider.family(以及 .autoDispose.family),Notifier 构造函数需保存该参数。使用时在 watch/read 时传入参数,如 ref.watch(userProvider('123')),不同参数状态独立。

限制与注意:参数必须有一致的 == 和 hashCode,不要用可变对象或列表/映射字面量作参数,例如 ref.watch(myProvider([1,2,3])) 是错误的,因为 [1,2,3] != [1,2,3];优先使用基本类型或实现了 ==/hashCode 的自定义类。可启用 riverpod_lint 的 provider_parameters 规则来发现此类错误。使用 family 时建议开启 auto-dispose,使参数不再被使用时其状态可被释放,避免缓存无限增长。

测试覆盖:覆盖单个参数时传入相同参数;覆盖全部参数时,用一个忽略参数或返回固定值的 provider 覆盖,具体语法参见 riverpod-overrides 与官方文档。

适用场景:按用户 ID 拉取用户、按查询词或页码获取列表等需要按参数分别缓存与独立刷新的场景。