You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 10:42:33