SuperAPI AI 工具集

signals-migration-6-to-7

编程与开发

查看项目

更新于 10-16 01:49

技能介绍

用途:本指南用于把使用 signals.dart 的应用与包从 6.x 迁移到 7.0.0,给出模式与规则。

主要变更:

  1. 统一 Options 类。signal、computed、effect 及异步信号不再接受 autoDispose、debugLabel 等散列参数,改为单个 options 参数。例如 signal(0, options: SignalOptions(autoDispose: true, name: 'counter'));computed(() => count.value * 2, options: ComputedOptions(autoDispose: true, name: 'double'))。集合信号同理使用 ListSignalOptions、SetSignalOptions、MapSignalOptions、IterableSignalOptions、QueueSignalOptions。
  2. 异步信号。futureSignal、streamSignal、asyncSignal、computedFrom、computedAsync 只保留主值/回调参数加具名 options: AsyncSignalOptions,其余参数标记 @Deprecated。例如 futureSignal(() => fetch(), options: AsyncSignalOptions(lazy: false, initialValue: 0))。
  3. Flutter 集成。SignalsMixin 已弃用,改用无状态 SignalWidget 或有状态 SignalStatefulWidget,或用局部 SignalBuilder 包裹依赖信号的组件。SignalBuilder 的 builder 改为必需具名参数。需要在构建或 mixin 中执行副作用的,迁移到局部 SignalEffect(别名 SignalListener),由其管理挂载、didUpdateWidget 与卸载生命周期。
  4. 可写计算信号。需要把外部更新同步回计算信号的逻辑,改用原生 linkedSignal 或 LinkedSignalOptions,手动写入会被覆盖、源变化会重置。

自动重构:signals_lint 在 IDE 动作菜单提供快速修复,可移除 with SignalsMixin 并替换为 SignalStatefulWidget,把位置参数式 Watch/Watch.builder 转为 SignalBuilder,将 StatelessWidget/StatefulWidget 提升为响应式组件,并把任意组件表达式包裹进 SignalBuilder。

配套文档见 signal_options.md、async_options.md、collection_options.md、builder_migration.md、mixin_migration.md。适用场景为升级依赖到 7.x 的 Dart/Flutter 项目;限制:仅覆盖 6.x 到 7.0.0 迁移,未提供价格、平台与效果信息。