Skip to content

Commit 7629a8c

Browse files
committed
add automaticCheck option, add PropertyAndClassNameSameChecker
1 parent a490e78 commit 7629a8c

15 files changed

+237
-192
lines changed

Flutter/json_to_dart/lib/l10n/app_en.arb

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,5 +52,6 @@
5252
},
5353
"propertyCantSameAsType": "property can't the same as Type",
5454
"containsIllegalCharacters": "contains illegal characters",
55-
"duplicateProperties":"There are duplicate properties"
55+
"duplicateProperties":"There are duplicate properties",
56+
"automaticCheck":"automatic check"
5657
}

Flutter/json_to_dart/lib/l10n/app_zh.arb

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,5 +52,6 @@
5252
},
5353
"propertyCantSameAsType": "属性名不能跟类型相同",
5454
"containsIllegalCharacters": "包含非法字符",
55-
"duplicateProperties":"属性名重复"
55+
"duplicateProperties":"属性名重复",
56+
"automaticCheck":"自动校验"
5657
}

Flutter/json_to_dart/lib/l10n/app_zh_Hant.arb

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,5 +52,6 @@
5252
},
5353
"propertyCantSameAsType": "屬性名不能跟類型相同",
5454
"containsIllegalCharacters": "包含非法字符",
55-
"duplicateProperties":"屬性名重複"
55+
"duplicateProperties":"屬性名重複",
56+
"automaticCheck":"自動校驗"
5657
}

Flutter/json_to_dart/lib/main.dart

Lines changed: 19 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ import 'style/color.dart';
1515
import 'widget/drag_icon.dart';
1616

1717
Future<void> main() async {
18-
//print(correctName('-0dd-jj/j.k-l0'));
1918
await Hive.initFlutter();
2019
await ConfigSetting().init();
2120
Get.put(MainController());
@@ -97,17 +96,26 @@ class _MyHomePageState extends State<MyHomePage> {
9796
}
9897

9998
bool pointerPressed = false;
99+
double delta = 0;
100100
void updateGridSplitter(double x) {
101-
final double width = (MediaQuery.of(context).size.width) /
102-
(ConfigSetting().column1Width + ConfigSetting().column2Width);
103-
final double width1 = max(width * ConfigSetting().column1Width + x, 50.0);
104-
final double width2 = max(width * ConfigSetting().column2Width - x, 50.0);
105-
ConfigSetting().column1Width =
106-
(double.parse((width1 / (width1 + width2)).toStringAsFixed(5)) * 10000)
107-
.toInt();
108-
ConfigSetting().column2Width =
109-
(double.parse((width2 / (width1 + width2)).toStringAsFixed(5)) * 10000)
110-
.toInt();
101+
delta += x;
102+
if (delta.abs() > 10) {
103+
final double width = (MediaQuery.of(context).size.width) /
104+
(ConfigSetting().column1Width + ConfigSetting().column2Width);
105+
final double width1 =
106+
max(width * ConfigSetting().column1Width + delta, 50.0);
107+
final double width2 =
108+
max(width * ConfigSetting().column2Width - delta, 50.0);
109+
ConfigSetting().column1Width =
110+
(double.parse((width1 / (width1 + width2)).toStringAsFixed(5)) *
111+
10000)
112+
.toInt();
113+
ConfigSetting().column2Width =
114+
(double.parse((width2 / (width1 + width2)).toStringAsFixed(5)) *
115+
10000)
116+
.toInt();
117+
delta = 0;
118+
}
111119
}
112120

113121
void onPointerDown(PointerDownEvent event) {

Flutter/json_to_dart/lib/main_controller.dart

Lines changed: 86 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import 'package:flutter/foundation.dart';
66
import 'package:flutter/material.dart';
77
import 'package:flutter/services.dart';
88
import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
9+
import 'package:flutter_spinkit/flutter_spinkit.dart';
910
import 'package:get/get_state_manager/get_state_manager.dart';
1011
import 'package:intl/intl.dart';
1112
import 'package:json_to_dart/models/dart_property.dart';
@@ -48,68 +49,69 @@ class MainController extends GetxController {
4849

4950
TextEditingController get textEditingController => _textEditingController;
5051

51-
List<DartProperty> allProperties = <DartProperty>[];
52-
List<DartObject> allObjects = <DartObject>[];
52+
Set<DartProperty> allProperties = <DartProperty>{};
53+
Set<DartObject> allObjects = <DartObject>{};
54+
Set<DartObject> printedObjects = <DartObject>{};
5355

54-
void formatJson() {
56+
Future<void> formatJsonAndCreateDartObject() async {
5557
allProperties.clear();
5658
allObjects.clear();
5759
if (text.isNullOrEmpty) {
5860
return;
5961
}
62+
63+
SmartDialog.showLoading(
64+
widget: const Center(
65+
child: SpinKitCubeGrid(color: Colors.orange),
66+
));
67+
6068
String inputText = text;
6169
try {
6270
if (kIsWeb) {
6371
// fix https://github.com/dart-lang/sdk/issues/34105
6472
inputText = text.replaceAll('.0', '.1');
6573
}
6674

67-
final dynamic jsonData = jsonDecode(inputText);
68-
late final Map<String, dynamic> jsonObject;
69-
70-
late final DartObject extendedObject;
71-
if (jsonData is Map) {
72-
jsonObject = jsonData as Map<String, dynamic>;
73-
extendedObject = DartObject(
74-
depth: 0,
75-
keyValuePair: MapEntry<String, dynamic>('Root', jsonObject),
76-
nullable: false,
77-
uid: 'Root',
78-
);
79-
} else if (jsonData is List) {
80-
jsonObject = jsonData.first as Map<String, dynamic>;
81-
82-
final Map<String, List<dynamic>> root = <String, List<dynamic>>{
83-
'Root': jsonData
84-
};
85-
extendedObject = DartObject(
86-
depth: 0,
87-
keyValuePair: MapEntry<String, dynamic>('Root', root),
88-
nullable: false,
89-
uid: 'Root',
90-
).objectKeys['Root']!
91-
..decDepth();
92-
} else {
75+
final dynamic jsonData =
76+
await compute<String, dynamic>(jsonDecode, inputText)
77+
.onError((Object? error, StackTrace stackTrace) {
78+
handleError(error, stackTrace);
79+
});
80+
81+
final DartObject? extendedObject = createDartObject(jsonData);
82+
// final DartObject? extendedObject =
83+
// await compute<dynamic, DartObject?>(createDartObject, jsonData)
84+
// .onError((Object? error, StackTrace stackTrace) {
85+
// handleError(error, stackTrace);
86+
// });
87+
if (extendedObject == null) {
9388
showAlertDialog(appLocalizations.illegalJson, Icons.error);
9489
return;
9590
}
91+
9692
dartObject = extendedObject;
97-
_textEditingController.text =
98-
const JsonEncoder.withIndent(' ').convert(jsonObject);
99-
update();
100-
} catch (e, stack) {
101-
print('$e');
102-
print('$stack');
103-
showAlertDialog(appLocalizations.formatErrorInfo, Icons.error);
10493

105-
Clipboard.setData(ClipboardData(text: '$e\n$stack'));
94+
final String? formatJsonString =
95+
await compute<dynamic, String?>(formatJson, jsonData)
96+
.onError((Object? error, StackTrace stackTrace) {
97+
handleError(error, stackTrace);
98+
});
99+
if (formatJsonString != null) {
100+
_textEditingController.text = formatJsonString;
101+
}
102+
103+
update();
104+
} catch (error, stackTrace) {
105+
handleError(error, stackTrace);
106106
}
107+
SmartDialog.dismiss();
107108
}
108109

109110
void generateDart() {
110111
// allProperties.clear();
111112
// allObjects.clear();
112113
printedObjects.clear();
114+
113115
if (dartObject != null) {
114116
final DartObject? errorObject = allObjects.firstOrNullWhere(
115117
(DartObject element) =>
@@ -232,3 +234,50 @@ class MainController extends GetxController {
232234
}
233235
}
234236
}
237+
238+
DartObject? createDartObject(dynamic jsonData) {
239+
DartObject? extendedObject;
240+
241+
if (jsonData is Map) {
242+
extendedObject = DartObject(
243+
depth: 0,
244+
keyValuePair:
245+
MapEntry<String, dynamic>('Root', jsonData as Map<String, dynamic>),
246+
nullable: false,
247+
uid: 'Root',
248+
);
249+
} else if (jsonData is List) {
250+
final Map<String, List<dynamic>> root = <String, List<dynamic>>{
251+
'Root': jsonData
252+
};
253+
extendedObject = DartObject(
254+
depth: 0,
255+
keyValuePair: MapEntry<String, dynamic>('Root', root),
256+
nullable: false,
257+
uid: 'Root',
258+
).objectKeys['Root']!
259+
..decDepth();
260+
}
261+
return extendedObject;
262+
}
263+
264+
String? formatJson(dynamic jsonData) {
265+
Map<String, dynamic>? jsonObject;
266+
if (jsonData is Map) {
267+
jsonObject = jsonData as Map<String, dynamic>;
268+
} else if (jsonData is List) {
269+
jsonObject = jsonData.first as Map<String, dynamic>;
270+
}
271+
if (jsonObject != null) {
272+
return const JsonEncoder.withIndent(' ').convert(jsonObject);
273+
}
274+
return null;
275+
}
276+
277+
void handleError(Object? e, StackTrace stack) {
278+
print('$e');
279+
print('$stack');
280+
showAlertDialog(appLocalizations.formatErrorInfo, Icons.error);
281+
282+
Clipboard.setData(ClipboardData(text: '$e\n$stack'));
283+
}

Flutter/json_to_dart/lib/models/config.dart

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,9 @@ class ConfigSetting extends Setting<ConfigSetting> {
5757
@HiveField(14)
5858
RxBool addCopyMethod = false.obs;
5959

60+
@HiveField(15)
61+
RxBool automaticCheck = true.obs;
62+
6063
@override
6164
Future<void> init({
6265
TypeAdapter<ConfigSetting>? adapter,

Flutter/json_to_dart/lib/models/config.g.dart

Lines changed: 7 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Flutter/json_to_dart/lib/models/dart_object.dart

Lines changed: 5 additions & 71 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,6 @@ import 'package:json_to_dart/utils/string_helper.dart';
1212
import 'config.dart';
1313
import 'dart_property.dart';
1414

15-
List<DartObject> printedObjects = <DartObject>[];
16-
1715
// ignore: must_be_immutable
1816
class DartObject extends DartProperty {
1917
DartObject({
@@ -295,10 +293,11 @@ class DartObject extends DartProperty {
295293

296294
@override
297295
String toString() {
298-
if (printedObjects.contains(this)) {
296+
final MainController controller = Get.find();
297+
if (controller.printedObjects.contains(this)) {
299298
return '';
300299
}
301-
printedObjects.add(this);
300+
controller.printedObjects.add(this);
302301

303302
orderPropeties();
304303

@@ -353,7 +352,7 @@ class DartObject extends DartProperty {
353352
item.key,
354353
className,
355354
if (ConfigSetting().nullsafety && item.nullable)
356-
'jsonRes[\'${item.key}\']==null?null:'
355+
'${DartHelper.jsonRes}[\'${item.key}\']==null?null:'
357356
else
358357
'',
359358
if (ConfigSetting().nullsafety) '!' else ''
@@ -506,74 +505,9 @@ class DartObject extends DartProperty {
506505
return sb.toString();
507506
}
508507

509-
void checkError(List<DartObject> dartObjects) {
510-
// for (final DartObject dartObject in dartObjects) {
511-
// if (dartObject.className.value == className.value) {
512-
// dartObject.classError.value =
513-
// classError.value = appLocalizations.duplicateClasses;
514-
// dartObject.duplicateClass = this;
515-
// duplicateClass = dartObject;
516-
// throw CheckError(
517-
// dartObject.uid +
518-
// '\n' +
519-
// uid +
520-
// '\n' +
521-
// appLocalizations.duplicateClasses,
522-
// );
523-
// }
524-
// }
525-
526-
// if (className.value.isNullOrEmpty) {
527-
// classError.value = appLocalizations.classNameAssert(uid);
528-
// throw CheckError(appLocalizations.classNameAssert(uid));
529-
// }
530-
531-
// for (final DartProperty item in properties) {
532-
// if (item.name.value.isNullOrEmpty) {
533-
// propertyError.value = appLocalizations.propertyNameAssert(item.uid);
534-
// throw CheckError(propertyError.value);
535-
// } else if (item.name.value == className.value) {
536-
// sameName = item;
537-
// item.sameName = this;
538-
// classError.value = item.propertyError.value =
539-
// appLocalizations.properyNameClassNameError;
540-
541-
// throw CheckError(uid + classError.value);
542-
// } else if (item is DartObject) {
543-
// if (depth > 0 &&
544-
// !item.uid.endsWith('_Array') &&
545-
// item.name.value.isNullOrEmpty) {
546-
// propertyError.value = appLocalizations.propertyNameAssert(item.uid);
547-
// throw CheckError(propertyError.value);
548-
// } else if (item.name.value == item.className.value) {
549-
// item.classError.value = item.propertyError.value =
550-
// appLocalizations.properyNameClassNameError;
551-
// item.sameName = item;
552-
// throw CheckError(item.uid + item.classError.value);
553-
// }
554-
// } else {
555-
// for (final DartObject dartObject in dartObjects) {
556-
// if (item.name.value == dartObject.className.value) {
557-
// dartObject.sameName = item;
558-
// item.sameName = dartObject;
559-
// dartObject.classError.value = item.propertyError.value =
560-
// appLocalizations.properyNameClassNameError;
561-
// throw CheckError(dartObject.classError.value);
562-
// }
563-
// }
564-
// }
565-
// }
566-
// dartObjects.add(this);
567-
568-
// for (final MapEntry<String, DartObject> item in objectKeys.entries) {
569-
// item.value.checkError(dartObjects);
570-
// }
571-
}
572-
573508
@override
574509
List<Object?> get props => <Object?>[
575-
className,
576-
// properties,
510+
key,
577511
uid,
578512
];
579513

0 commit comments

Comments
 (0)