diff --git a/lib/generator.dart b/lib/generator.dart index 2fc616c..9c1ad55 100644 --- a/lib/generator.dart +++ b/lib/generator.dart @@ -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 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(); + }); +} diff --git a/lib/json_generator.dart b/lib/json_generator.dart index 36ccfba..3950d47 100644 --- a/lib/json_generator.dart +++ b/lib/json_generator.dart @@ -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; } diff --git a/lib/template.dart b/lib/template.dart index 8549bd1..fddc430 100644 --- a/lib/template.dart +++ b/lib/template.dart @@ -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; } diff --git a/lib/test.dart b/lib/test.dart index 70610ba..19d38ed 100644 --- a/lib/test.dart +++ b/lib/test.dart @@ -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(); + }); } diff --git a/web/index.html b/web/index.html index d6bba0b..9c471d2 100644 --- a/web/index.html +++ b/web/index.html @@ -33,7 +33,9 @@ jsonKey annotation use camelCase +
+
diff --git a/web/styles.css b/web/styles.css index 2a56106..480fc80 100644 --- a/web/styles.css +++ b/web/styles.css @@ -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; } \ No newline at end of file