diff --git a/lib/commands/generate_command.dart b/lib/commands/generate_command.dart index d63ded6..ce5a48f 100644 --- a/lib/commands/generate_command.dart +++ b/lib/commands/generate_command.dart @@ -1,3 +1,7 @@ +import 'dart:io'; + +import 'package:path/path.dart' as path; + import '../core/models.dart'; import '../generators/documentation_generator.dart'; import '../generators/endpoint_code_generator.dart'; @@ -220,6 +224,17 @@ class GenerateCommand extends BaseCommand { } } + // 重新生成 index.dart 文件,包含所有生成的文件 + if (options.generateModels || options.generateApi) { + progress('正在重新生成 index.dart 文件...'); + final modelsDir = '$fullOutputDir/api_models'; + final allFiles = await _getAllModelFiles(modelsDir); + final indexContent = _generateUpdatedIndexFile(allFiles); + final indexPath = '$modelsDir/index.dart'; + await FileUtils.writeFile(indexPath, indexContent); + success('index.dart 文件已更新'); + } + // 生成文档 if (options.generateDocs) { progress('正在生成API文档...'); @@ -268,6 +283,58 @@ class GenerateCommand extends BaseCommand { ); } + /// 获取所有模型文件列表 + Future> _getAllModelFiles(String modelsDir) async { + try { + final directory = Directory(modelsDir); + if (!await directory.exists()) { + return []; + } + + final files = await directory.list().toList(); + final dartFiles = []; + + for (final entity in files) { + if (entity is File && entity.path.endsWith('.dart')) { + final fileName = path.basename(entity.path); + // 排除 index.dart 本身和 .g.dart 文件 + if (fileName != 'index.dart' && !fileName.endsWith('.g.dart')) { + dartFiles.add(fileName); + } + } + } + + // 按文件名排序 + dartFiles.sort(); + return dartFiles; + } catch (e) { + print('获取模型文件列表失败: $e'); + return []; + } + } + + /// 生成更新的 index.dart 文件内容 + String _generateUpdatedIndexFile(List fileNames) { + final buffer = StringBuffer(); + + // 生成文件头 + buffer.writeln('// API 模型导出文件'); + buffer.writeln('// 基于 Swagger API 文档: '); + buffer.writeln('// 自动生成于: ${DateTime.now().toString().substring(0, 10)} '); + buffer.writeln('// 由 xy_swagger_generator by max 生成'); + buffer.writeln('// Copyright (C) 2025 YuanXuan. All rights reserved.'); + buffer.writeln(''); + buffer.writeln('library;'); + buffer.writeln(''); + + // 导出所有文件 + for (final fileName in fileNames) { + buffer.writeln('export \'$fileName\';'); + } + + return buffer.toString(); + } + /// 生成摘要信息 void _generateSummary(SwaggerDocument document, String outputDir) { final summary = StringBuffer(); diff --git a/lib/generators/model_code_generator.dart b/lib/generators/model_code_generator.dart index 5a24a32..634ed81 100644 --- a/lib/generators/model_code_generator.dart +++ b/lib/generators/model_code_generator.dart @@ -226,7 +226,7 @@ class ModelCodeGenerator extends ModelGenerator { buffer.writeln(StringUtils.generateComment(model.description)); } - buffer.writeln('@JsonSerializable()'); + buffer.writeln('@JsonSerializable(checked: true)'); buffer.writeln('class $className {'); // 生成属性 @@ -571,7 +571,7 @@ class ModelCodeGenerator extends ModelGenerator { buffer.writeln(StringUtils.generateComment(model.description)); } - buffer.writeln('@JsonSerializable()'); + buffer.writeln('@JsonSerializable(checked: true)'); buffer.writeln('class $className {'); // 生成属性 diff --git a/lib/generators/retrofit_api_generator.dart b/lib/generators/retrofit_api_generator.dart index 007f1fd..8953a64 100644 --- a/lib/generators/retrofit_api_generator.dart +++ b/lib/generators/retrofit_api_generator.dart @@ -1340,7 +1340,7 @@ class RetrofitApiGenerator extends BaseGenerator { buffer.writeln(''); // 生成参数实体类 - buffer.writeln('@JsonSerializable()'); + buffer.writeln('@JsonSerializable(checked: true)'); buffer.writeln('class $className {'); // 生成属性 diff --git a/lib/utils/string_utils.dart b/lib/utils/string_utils.dart index ec1acc5..082e24f 100644 --- a/lib/utils/string_utils.dart +++ b/lib/utils/string_utils.dart @@ -344,10 +344,11 @@ class StringUtils { /// 生成文件头注释 static String generateFileHeader(String description, String source) { - final timestamp = DateTime.now().toIso8601String(); + final timestamp = DateTime.now().toLocal().toString().split(" ").first; return '''// $description // 基于 Swagger API 文档: -// 自动生成于: $timestamp by Max +// 自动生成于: $timestamp +// 由 xy_swagger_generator by max 生成 // Copyright (C) 2025 YuanXuan. All rights reserved. '''; }