整体逻辑完成

This commit is contained in:
Caijinglong
2018-08-07 16:14:34 +08:00
parent eaae6fe386
commit 947f05a8d2
6 changed files with 44 additions and 17 deletions

View File

@@ -4,17 +4,15 @@ import 'package:json2dart_serialization/template.dart';
class Generator {
String jsonString;
String fileName;
String entityName;
Generator(this.jsonString, this.fileName, [this.entityName]);
Generator(this.jsonString, [this.entityName]);
List<DefaultTemplate> templateList = [];
String makeDartCode() {
var entityName = this.entityName ?? "Entity";
DefaultTemplate template =
DefaultTemplate(srcJson: jsonString, className: entityName);
DefaultTemplate template = DefaultTemplate(srcJson: jsonString, className: entityName);
StringBuffer resultSb = StringBuffer();
templateList.add(template);
refreshTemplate(template);
@@ -32,14 +30,12 @@ class Generator {
fieldList.forEach((filed) {
if (filed is MapField) {
// filed.typeString
DefaultTemplate template = DefaultTemplate(
srcJson: json.encode(filed.map), className: filed.typeString);
DefaultTemplate template = DefaultTemplate(srcJson: json.encode(filed.map), className: filed.typeString);
templateList.add(template);
refreshTemplate(template);
} else if (filed is ListField) {
if (filed.childIsObject) {
DefaultTemplate template = DefaultTemplate(
srcJson: json.encode(filed.list[0]), className: filed.typeName);
DefaultTemplate template = DefaultTemplate(srcJson: json.encode(filed.list[0]), className: filed.typeName);
templateList.add(template);
refreshTemplate(template);
}
@@ -47,12 +43,21 @@ class Generator {
});
}
static const String importString =
"import 'package:json_annotation/json_annotation.dart';";
String get fileName => camelCase2UnderScoreCase(entityName);
static const String importString = "import 'package:json_annotation/json_annotation.dart';";
String get header => """$importString
part $fileName.g.dart;
part '$fileName.g.dart';
""";
}
String camelCase2UnderScoreCase(String name) {
return name[0].toLowerCase() +
name.substring(1).replaceAllMapped(RegExp("[A-Z]"), (match) {
var str = match.group(0);
return "_" + str.toLowerCase();
});
}

View File

@@ -75,6 +75,14 @@ void main() {
});
refreshData();
querySelector("#copy").onClick.listen((event) {
TextAreaElement result = querySelector("#result");
result.focus();
result.setSelectionRange(0, result.textLength);
document.execCommand("copy", null, "");
result.blur();
});
}
void refreshData() {
@@ -95,8 +103,10 @@ void refreshData() {
entityClassName = entityName;
}
var generator = Generator(string, 'test.dart', entityClassName);
var generator = Generator(string, entityClassName);
var dartCode = generator.makeDartCode();
var dartFileName = ("${generator.fileName}.dart");
querySelector("#file_name").text = "应该使用的文件名为: $dartFileName";
result.value = dartCode;
}

View File

@@ -60,7 +60,7 @@ class $className extends Object with _\$${className}SerializerMixin {""";
}
String nameString;
if (main.isCamelCase) {
nameString = camelCase(f.nameString);
nameString = firstLetterLower(camelCase(f.nameString));
} else {
nameString = f.nameString;
}

View File

@@ -1,3 +1,8 @@
void main() {
print(1.0 is int);
void main() {}
String camelCase2UnderScoreCase(String name) {
return name.replaceAllMapped(RegExp("[A-Z]"), (match) {
var str = match.group(0);
return "_" + str.toLowerCase();
});
}

View File

@@ -33,7 +33,9 @@
<input type="checkbox" id="use_json_key"/><span id="check_label">jsonKey annotation</span>
<input type="checkbox" id="camelCase"/><span id="camelCaseLabel">use camelCase</span>
</div>
<div id="file_name"></div>
<textarea id="result" title="结果"></textarea>
<div><button id="copy">复制</button></div>
</div>
</div>

View File

@@ -24,13 +24,18 @@ body {
textarea {
width: 90%;
height: 90vh;
height: 80vh;
}
.result_title {
padding-bottom: 15px;
}
.out_entity_name{
#result {
width: 90%;
height: 70vh;
}
.out_entity_name {
height: 40px;
}