SuperAPI AI 工具集

riverpod-3-0-migration

编程与开发

查看项目

更新于 10-16 01:49

技能介绍

用途:帮助把使用 Riverpod 2.0 的 Flutter/Dart 项目迁移到 3.0,整理主要变更点与迁移步骤。

主要能力与关键变更:

  1. 自动重试:失败的 provider 在 3.0 中默认重试。全局禁用可传 ProviderScope(retry: (retryCount, error) => null, child: MyApp()) 或 ProviderContainer(retry: (retryCount, error) => null);单个 provider 可在定义时传 retry: (retryCount, error) => null,codegen 用 @Riverpod(retry: ...)。
  2. 离屏 provider 暂停:不可见 widget(如屏幕外)中的监听器默认暂停,无全局开关。若某个子树不暂停,用 TickerMode(enabled: true, child: ...) 包裹。
  3. legacy providers:StateProvider、StateNotifierProvider、ChangeNotifierProvider 迁到 legacy 导入,未被删除但不推荐。继续使用需 import 'package:flutter_riverpod/legacy.dart';,或用 hooks_riverpod/legacy.dart、riverpod/legacy.dart。
  4. 更新比较改用 ==:所有 provider 用 == 过滤更新(不再是 identical),StreamProvider/StreamNotifier 的值也用 == 比较;可在 Notifier 上重写 updateShouldNotify(previous, next)(如返回 true 始终通知)。
  5. ProviderObserver API 变更:回调改为接收单个 ProviderObserverContext(含 container、provider、可选 mutation),不再分别传参。例如 didAddProvider(ProviderObserverContext context, Object? value)。
  6. Ref 简化:Ref 不再有类型参数,统一用 Ref(codegen 中把 MyProviderRef 替换为 Ref)。ProviderRef.state、Ref.listenSelf、FutureProviderRef.future 移到 Notifier/AsyncNotifier 上,使用 Notifier.state、Notifier.listenSelf、AsyncNotifier.future。
  7. AutoDispose 类型名移除:行为仍支持,但类型名统一,把类型名中的 AutoDispose 替换为空字符串。
  8. Family Notifier 类型移除:FamilyNotifier、FamilyAsyncNotifier、FamilyStreamNotifier 被移除,改用 Notifier/AsyncNotifier/StreamNotifier,参数通过构造函数传入并存入字段,build() 不再接收 family 参数。
  9. ProviderException:provider 抛异常时被包装为 ProviderException,原先按具体类型捕获的代码需改为 on ProviderException catch (e) 并检查 e.exception;仅用 AsyncValue 和 value.hasError/value.error 时无需改动。

使用方式:按上述各点逐项调整代码,并参考官方 Riverpod 文档了解完整变更。

限制:资料为变更摘要,未提供平台、价格、完整 API 列表或逐步示例;具体版本亮点与更多细节需查阅官方文档。