forked from lxm_flutter/json2dart
整体逻辑完成
This commit is contained in:
@@ -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();
|
||||
});
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
});
|
||||
}
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
Reference in New Issue
Block a user