generateWrapBuilder method

void generateWrapBuilder({
  1. String outputFile = 'wrapper_builder',
  2. List<String> importList = const [],
  3. String className = 'WrapperBuilder',
  4. String? wrapBaseClass,
  5. bool exportFile = true,
})

生成包装模型构建器类

Implementation

void generateWrapBuilder({
  String outputFile = 'wrapper_builder',
  List<String> importList = const [],
  String className = 'WrapperBuilder',
  String? wrapBaseClass,
  bool exportFile = true,
}) {
  final indent = _config.indent;
  final outputPath = '${_config.absFolder}/$outputFile.dart'; //输入文件路径
  final buffer = StringBuffer();
  //删除旧文件
  try {
    final oldFile = File(outputPath); //旧文件
    if (oldFile.existsSync()) {
      oldFile.deleteSync();
      logDebug(['delete file', outputPath, 'success.']);
    }
  } catch (error, stack) {
    logError(['delete file', outputPath, 'error:', error, '\n', stack]);
  }
  if (_wrapList.isEmpty) return;
  //拼接类内容
  buffer.write('import \'package:shelf_easy/shelf_easy.dart\';\n');
  for (var element in importList) {
    if (element.startsWith('import')) {
      buffer.write('$element\n');
    } else {
      buffer.write('import \'$element\';\n');
    }
  }
  buffer.write('\n');
  for (var element in _wrapList) {
    final path = '${element.outputFile?.toLowerCase() ?? element.className.toLowerCase()}.dart'; //输入文件路径
    buffer.write('import \'$path\';\n');
  }
  buffer.write('\n');
  if (exportFile) {
    for (var element in _wrapList) {
      final path = '${element.outputFile?.toLowerCase() ?? element.className.toLowerCase()}.dart'; //输入文件路径
      buffer.write('export \'$path\';\n');
    }
    buffer.write('\n');
  }
  buffer.write('///\n');
  buffer.write('///Parsing class\n');
  buffer.write('///\n');
  buffer.write('class $className {\n'); //类开始
  buffer.write('$indent///Parsing fields\n');
  buffer.write('${indent}static final _recordBuilder = <String, ${_config.baseClass} Function(Map<String, dynamic> map)>{\n');
  for (var element in _wrapList) {
    buffer.write('$indent$indent\'${element.className}\': (Map<String, dynamic> map) => ${element.className}.fromJson(map),\n');
  }
  buffer.write('$indent};\n\n');
  buffer.write('$indent///Parsing method\n');
  buffer.write('${indent}static ${_config.baseClass} buildRecord(Map<String, dynamic> map) => _recordBuilder[map[\'type\']]!(map);\n');
  buffer.write('}\n'); //类结束
  //写入到文件
  try {
    File(outputPath)
      ..createSync(recursive: true)
      ..writeAsStringSync(buffer.toString());
    logInfo(['write to file', outputPath, 'success.\n']);
  } catch (error, stack) {
    logError(['write to file', outputPath, 'error:', error, '\n', stack]);
  }
}