generatedWithSingleFile function

void generatedWithSingleFile({
  1. required AssetStruct struct,
  2. required String classNamePrefix,
  3. required Directory outputDir,
  4. required String instanceName,
  5. required String partFileName,
})

生成單一結構的檔案 也就是只生成根目錄的檔案

Implementation

void generatedWithSingleFile({
  required AssetStruct struct,
  required String classNamePrefix,
  required Directory outputDir,
  required String instanceName,
  required String partFileName,
}) {
  final code = struct.toDartCode(
    classNamePrefix: classNamePrefix,
    fieldStatic: false,
    generateInstance: false,
  );

  final filename = basename(outputDir.path);

  // 在code開頭加入part
  final partCode = 'part of \'$filename.dart\';';

  final formatter = DartFormatter(
    languageVersion: DartFormatter.latestLanguageVersion,
  );
  final formattedCode = formatter.format('$partCode\n$code');

  final outputFile = File(join(outputDir.path, '$filename.dart'));

  // 輸出檔案的檔名, instance將會放置在此處
  final outputFileName = basename(outputFile.path);

  // part檔案, 生成的class將會放置此處
  final partFilePath = join(outputDir.path, partFileName);
  final partFile = File(partFilePath);

  if (outputFileName == partFileName) {
    stderr.write('輸出檔案名稱不得與part檔案名稱相同, 請檢查\n');
    exit(1);
  }

  outputDir.createSync(recursive: true);
  partFile.writeAsStringSync(formattedCode);

  if (!outputFile.existsSync()) {
    // 若part檔案不存在則自動生成
    final content = '''
// 此檔案自動生成, 生成path class不會覆蓋檔案, 可在此創建調用asset的實體

part \'$partFileName\';

const $instanceName = ${struct.classname}._();
''';
    outputFile.writeAsStringSync(content);
  }
}