Flutter执行build_runner未生成.g.dart文件问题求助
排查 build_runner 成功但未生成 .g.dart 文件的问题
根据你提供的日志(显示0 outputs)和代码,以下是具体排查步骤:
1. 确认依赖配置完整
检查pubspec.yaml是否包含所有必要依赖,特别是retrofit相关的生成器:
dependencies: dio: ^5.4.0 # 确保版本与retrofit兼容 retrofit: ^4.0.3 dev_dependencies: build_runner: ^2.4.6 retrofit_generator: ^8.0.4 json_serializable: ^6.7.1 # 如果PatientModel用了json序列化,需要这个
执行dart pub get确保依赖安装完成。
2. 验证Part语句正确性
确认part 'patient_api_service.g.dart';中的文件名与当前文件完全一致(包括大小写、路径)。比如当前文件名为patient_api_service.dart,则part语句正确;若文件名有差异(如PatientApiService.dart),则会导致生成文件无法匹配。
3. 检查PatientModel的序列化配置
Retrofit生成代码依赖模型的序列化能力,确保PatientModel正确配置了json_serializable:
import 'package:json_annotation/json_annotation.dart'; part 'patient_model.g.dart'; @JsonSerializable() class PatientModel { // 你的模型字段 String? id; // ...其他字段 PatientModel({this.id}); factory PatientModel.fromJson(Map<String, dynamic> json) => _$PatientModelFromJson(json); Map<String, dynamic> toJson() => _$PatientModelToJson(this); }
如果模型未配置序列化,retrofit生成器会因无法处理返回类型而跳过代码生成。
4. 确认apiBaseUrl的有效性
检查apiBaseUrl是否在constants.dart中正确定义为编译时常量:
const String apiBaseUrl = "https://your-api-url.com";
若apiBaseUrl不是常量(比如是变量或动态获取的值),@RestApi注解会无法识别,导致生成器不工作。
5. 清理缓存并重新构建
执行以下命令彻底清理构建缓存,再重新运行生成:
rm -rf .dart_tool/build/ dart run build_runner clean dart run build_runner build --delete-conflicting-outputs
6. 检查build.yaml配置(若存在)
如果项目根目录有build.yaml文件,确认没有排除当前文件的规则:
# 确保没有类似这样的排除规则 targets: $default: builders: retrofit_generator: options: exclude: - lib/features/user_registration/data/services/patient_api_service.dart
内容的提问来源于stack exchange,提问作者Andi Alidema
相关产品推荐
相关产品推荐

