使用build_runner结合freezed等工具及Dart新特性遇代码生成错误
解决build_runner代码生成时的enhanced-enums/super-parameters特性报错问题
当你在使用build_runner配合freezed、json_serializable、auto_route生成代码时,遇到This requires the 'enhanced-enums' language feature to be enabled这类报错,试试下面的解决步骤:
确认Dart SDK版本达标
enhanced-enums和super-parameters在Dart 2.17及以上版本已经是稳定特性,先检查pubspec.yaml里的环境配置,确保SDK版本不低于2.17:environment: sdk: '>=2.17.0 <4.0.0'明确启用语言特性(必要时)
部分旧版本的代码生成器可能需要在analysis_options.yaml里明确开启特性,添加或修改以下配置:analyzer: language: enableEnhancedEnums: true enableSuperMixins: true # 对应super-parameters特性清理缓存并重新生成代码
缓存冲突也可能导致这类问题,执行以下命令彻底清理后重新生成:# Flutter项目 flutter clean flutter pub get flutter pub run build_runner build --delete-conflicting-outputs # 纯Dart项目 dart pub cache clean dart pub get dart pub run build_runner build --delete-conflicting-outputs更新依赖到最新版本
旧版本的freezed、json_serializable、auto_route可能对新语言特性支持不足,把这些依赖更新到最新稳定版,示例pubspec.yaml配置:dependencies: freezed_annotation: ^2.4.1 json_annotation: ^4.8.1 auto_route: ^7.3.0 dev_dependencies: build_runner: ^2.4.4 freezed: ^2.4.5 json_serializable: ^6.7.1 auto_route_generator: ^7.3.0更新后执行
flutter pub get或dart pub get。检查代码语法是否合规
有时候报错不是特性没启用,而是你写的enhanced-enums或super-parameters语法有误。比如增强枚举的正确写法:enum UserStatus { active('已激活'), inactive('未激活'); final String displayName; const UserStatus(this.displayName); }确认你的代码没有语法错误后再重新生成。
内容的提问来源于stack exchange,提问作者Sergei Lobanov
相关产品推荐
相关产品推荐

