使用Freezed包生成归档文件时出现Stack Overflow错误如何解决?
Freezed配合Modular、Injectable空安全迁移后生成时栈溢出解决方案
[SEVERE] freezed:freezed on [my archives directory].dart:
Stack Overflow
该报错在同时使用@freezed和@Injectable()注解的场景下出现,空安全迁移前运行正常,属于依赖兼容或注解使用不规范导致的生成器递归问题,可按以下步骤排查解决:
- 第一步:对齐所有相关依赖的空安全兼容版本
确保以下依赖全部升级到支持空安全的最新稳定版,避免版本交叉不兼容触发生成器逻辑冲突:freezed、freezed_annotation>= 2.0.0injectable、injectable_generator>= 1.5.0flutter_modular、modular_codegen>= 5.0.0build_runner>= 2.0.0
- 第二步:修正
@freezed和@Injectable()的注解使用规范
空安全版本的Freezed要求可注入类必须显式声明私有构造函数,且注解顺序需要将@Injectable()放在@freezed上方,正确写法示例:
@Injectable() @freezed class ExampleModel with _$ExampleModel { // 必须添加私有构造,供Injectable识别可用构造器 const ExampleModel._(); const factory ExampleModel({ required String id, required String name, }) = _ExampleModel; }
- 第三步:排查循环注入/循环引用问题
检查所有添加了双注解的类,是否存在A依赖B、B依赖A的循环引用场景,空安全后生成器的类型校验逻辑会在这类场景下进入无限递归,拆分循环依赖即可解决。 - 第四步:清理缓存后重新执行生成命令
执行以下命令清除历史缓存产物后重新生成:
flutter clean rm pubspec.lock flutter pub get flutter pub run build_runner build --delete-conflicting-outputs --low-resources-mode
内容的提问来源于stack exchange,提问作者Alencar Moreira
相关产品推荐
相关产品推荐

