generateWrapBuilder method
void
generateWrapBuilder({})
生成包装模型构建器类
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]);
}
}