Skip to content

Commit 4d51d8c

Browse files
committed
add copy method
1 parent 1df2b71 commit 4d51d8c

File tree

11 files changed

+253
-83
lines changed

11 files changed

+253
-83
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
@@ -38,5 +38,6 @@
3838
"fileHeaderHelp": "You can add copyright,dart code, creator into here. support [Date yyyy MM-dd] format to generate time.",
3939
"nullsafety": "Null Safety",
4040
"nullable": "Nullable",
41-
"smartNullable": "Smart Nullable"
41+
"smartNullable": "Smart Nullable",
42+
"addCopyMethod":"Add Copy Method"
4243
}

Flutter/json_to_dart/lib/l10n/app_zh.arb

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,5 +38,6 @@
3838
"fileHeaderHelp": "可以在这里添加 Copyright,导入 Dart 代码,创建人信息等等。支持[Date yyyy MM-dd]来生成时间,Date后面为日期格式.",
3939
"nullsafety": "空安全",
4040
"nullable": "可空",
41-
"smartNullable": "智能可空"
41+
"smartNullable": "智能可空",
42+
"addCopyMethod":"添加复制方法"
4243
}

Flutter/json_to_dart/lib/l10n/app_zh_Hant.arb

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,5 +38,6 @@
3838
"fileHeaderHelp": "可以在這裏添加 Copyright,導入 Dart 代碼,創建人資訊等等。支持[Date yyyy MM-dd]來生成時間,Date後面為日期格式。",
3939
"nullsafety": "空安全",
4040
"nullable": "可空",
41-
"smartNullable": "智能可空"
41+
"smartNullable": "智能可空",
42+
"addCopyMethod":"添加複製方法"
4243
}

Flutter/json_to_dart/lib/models/config.dart

Lines changed: 82 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -25,43 +25,82 @@ class ConfigSetting extends Setting<ConfigSetting> with ChangeNotifier {
2525
await super.init(adapter: ConfigSettingAdapter(), defaultValue: this);
2626
}
2727

28-
@HiveField(0)
28+
@HiveField(
29+
0,
30+
defaultValue: true,
31+
)
2932
bool addMethod = true;
30-
@HiveField(1)
33+
@HiveField(
34+
1,
35+
defaultValue: 2,
36+
)
3137
int column1Width = 2;
32-
@HiveField(2)
38+
@HiveField(
39+
2,
40+
defaultValue: 3,
41+
)
3342
int column2Width = 3;
34-
@HiveField(3)
43+
@HiveField(
44+
3,
45+
defaultValue: false,
46+
)
3547
bool enableArrayProtection = false;
36-
@HiveField(4)
48+
@HiveField(
49+
4,
50+
defaultValue: false,
51+
)
3752
bool enableDataProtection = false;
38-
@HiveField(5)
53+
@HiveField(
54+
5,
55+
defaultValue: '',
56+
)
3957
String fileHeaderInfo = '';
40-
@HiveField(6)
58+
@HiveField(
59+
6,
60+
defaultValue: 1,
61+
)
4162
int traverseArrayCount = 1;
42-
@HiveField(7)
63+
@HiveField(
64+
7,
65+
defaultValue: PropertyNamingConventionsType.camelCase,
66+
)
4367
PropertyNamingConventionsType propertyNamingConventionsType =
4468
PropertyNamingConventionsType.camelCase;
4569

4670
PropertyAccessorType _propertyAccessorType = PropertyAccessorType.none;
47-
@HiveField(8)
71+
@HiveField(
72+
8,
73+
defaultValue: PropertyAccessorType.none,
74+
)
4875
PropertyAccessorType get propertyAccessorType => _propertyAccessorType;
49-
@HiveField(8)
76+
@HiveField(
77+
8,
78+
defaultValue: PropertyAccessorType.none,
79+
)
5080
set propertyAccessorType(PropertyAccessorType value) {
5181
if (_propertyAccessorType != value) {
5282
_propertyAccessorType = value;
5383
notifyListeners();
5484
}
5585
}
5686

57-
@HiveField(9)
87+
@HiveField(
88+
9,
89+
defaultValue: PropertyNameSortingType.none,
90+
)
5891
PropertyNameSortingType propertyNameSortingType =
5992
PropertyNameSortingType.none;
6093

6194
bool _nullsafety = false;
62-
@HiveField(10)
95+
@HiveField(
96+
10,
97+
defaultValue: false,
98+
)
6399
bool get nullsafety => _nullsafety;
64-
@HiveField(10)
100+
@HiveField(
101+
10,
102+
defaultValue: false,
103+
)
65104
set nullsafety(bool value) {
66105
if (_nullsafety != value) {
67106
_nullsafety = value;
@@ -70,9 +109,15 @@ class ConfigSetting extends Setting<ConfigSetting> with ChangeNotifier {
70109
}
71110

72111
bool _nullable = true;
73-
@HiveField(11)
112+
@HiveField(
113+
11,
114+
defaultValue: true,
115+
)
74116
bool get nullable => _nullable;
75-
@HiveField(11)
117+
@HiveField(
118+
11,
119+
defaultValue: true,
120+
)
76121
set nullable(bool value) {
77122
if (_nullable != value) {
78123
_nullable = value;
@@ -81,9 +126,15 @@ class ConfigSetting extends Setting<ConfigSetting> with ChangeNotifier {
81126
}
82127

83128
Locale _locale = const Locale.fromSubtags(languageCode: 'en');
84-
@HiveField(12)
129+
@HiveField(
130+
12,
131+
defaultValue: Locale.fromSubtags(languageCode: 'en'),
132+
)
85133
Locale get locale => _locale;
86-
@HiveField(12)
134+
@HiveField(
135+
12,
136+
defaultValue: Locale.fromSubtags(languageCode: 'en'),
137+
)
87138
set locale(Locale value) {
88139
// fix hive error
89140
// we change zh_Hans to zh
@@ -99,15 +150,27 @@ class ConfigSetting extends Setting<ConfigSetting> with ChangeNotifier {
99150
}
100151

101152
bool _smartNullable = false;
102-
@HiveField(13)
153+
@HiveField(
154+
13,
155+
defaultValue: false,
156+
)
103157
bool get smartNullable => _smartNullable;
104-
@HiveField(13)
158+
@HiveField(
159+
13,
160+
defaultValue: false,
161+
)
105162
set smartNullable(bool value) {
106163
if (_smartNullable != value) {
107164
_smartNullable = value;
108165
notifyListeners();
109166
}
110167
}
168+
169+
@HiveField(
170+
14,
171+
defaultValue: false,
172+
)
173+
bool addCopyMethod = false;
111174
}
112175

113176
class TypeIds {

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

Lines changed: 28 additions & 18 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: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -320,6 +320,8 @@ class DartObject extends DartProperty {
320320
final MyStringBuffer fromJsonSb1 = MyStringBuffer();
321321
final MyStringBuffer toJsonSb = MyStringBuffer();
322322

323+
final MyStringBuffer copySb = MyStringBuffer();
324+
323325
factorySb.writeLine(
324326
stringFormat(DartHelper.factoryStringHeader, <String>[className]));
325327

@@ -339,6 +341,8 @@ class DartObject extends DartProperty {
339341
(ConfigSetting().nullsafety && item.nullable),
340342
);
341343
final bool isGetSet = fss.startsWith('{');
344+
String copyProperty = item.name;
345+
342346
if (item is DartObject) {
343347
className = item.className;
344348

@@ -356,11 +360,17 @@ class DartObject extends DartProperty {
356360
if (ConfigSetting().nullsafety && item.nullable) {
357361
typeString += '?';
358362
}
363+
364+
if (!ConfigSetting().nullsafety || item.nullable) {
365+
copyProperty += '?';
366+
}
367+
copyProperty += '.copy()';
359368
} else if (item.value is List) {
360369
if (objectKeys.containsKey(item.key)) {
361370
className = objectKeys[item.key]!.className;
362371
}
363372
typeString = item.getTypeString(className: className);
373+
364374
typeString = typeString.replaceAll('?', '');
365375

366376
fromJsonSb1.writeLine(item.getArraySetPropertyString(
@@ -382,6 +392,8 @@ class DartObject extends DartProperty {
382392
}
383393
}
384394
setString += ',';
395+
396+
copyProperty = item.getListCopy(className: className);
385397
} else {
386398
setString = DartHelper.setProperty(item.name, item, this.className);
387399
typeString = DartHelper.getDartTypeString(item.type, item);
@@ -431,6 +443,8 @@ class DartObject extends DartProperty {
431443
item.key,
432444
setName,
433445
]));
446+
447+
copySb.writeLine('${item.name}:$copyProperty,');
434448
}
435449

436450
if (factorySb1.length == 0) {
@@ -468,8 +482,14 @@ class DartObject extends DartProperty {
468482
sb.writeLine(propertySb.toString());
469483
sb.writeLine(DartHelper.classToString);
470484
sb.writeLine(toJsonSb.toString());
471-
sb.writeLine(stringFormat(DartHelper.classToClone,
472-
<String>[className, if (ConfigSetting().nullsafety) '!' else '']));
485+
if (ConfigSetting().addCopyMethod) {
486+
sb.writeLine(stringFormat(DartHelper.copyWithString, <String>[
487+
className,
488+
copySb.toString(),
489+
]));
490+
}
491+
// sb.writeLine(stringFormat(DartHelper.classToClone,
492+
// <String>[className, if (ConfigSetting().nullsafety) '!' else '']));
473493
}
474494

475495
sb.writeLine(DartHelper.classFooter);

Flutter/json_to_dart/lib/models/dart_property.dart

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,48 @@ class DartProperty extends Equatable {
8989
return result ?? (className ?? DartHelper.getDartTypeString(type, this));
9090
}
9191

92+
String getListCopy({String? className}) {
93+
// if (className == null) {
94+
// return '$name$toList';
95+
// }
96+
dynamic temp = value;
97+
String copy = '';
98+
String type = '{0}';
99+
100+
while (temp is List) {
101+
if (copy == '') {
102+
copy =
103+
'e.map(($type e) => ${className != null ? 'e.copy()' : 'e'}).toList()';
104+
} else {
105+
type = 'List<$type>';
106+
copy = 'e.map(($type e)=> $copy).toList()';
107+
}
108+
if (temp is List) {
109+
temp = temp.first;
110+
}
111+
}
112+
113+
//type = 'List<$type>';
114+
// copy =
115+
// '${ConfigSetting().nullsafety && !nullable ? name : name + '?'}.map(($type e)=> $copy)$toList';
116+
copy = stringFormat(copy, <String>[
117+
className ??
118+
DartHelper.getDartTypeString(
119+
DartHelper.converDartType(temp?.runtimeType ?? Object), this)
120+
.replaceAll('?', '')
121+
]);
122+
copy = copy.replaceFirst(
123+
'e',
124+
ConfigSetting().nullsafety && !nullable ? name : name + '?',
125+
);
126+
127+
if (!ConfigSetting().nullsafety) {
128+
copy = copy.replaceRange(
129+
copy.length - '.toList()'.length, null, '?.toList()');
130+
}
131+
return copy;
132+
}
133+
92134
String getBaseTypeString({String? className}) {
93135
if (className != null) {
94136
return className;

Flutter/json_to_dart/lib/pages/setting.dart

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -250,6 +250,15 @@ class _MoreSettingState extends State<MoreSetting> {
250250
});
251251
},
252252
),
253+
StCheckBox(
254+
title: appLocalizations.addCopyMethod,
255+
value: ConfigSetting().addCopyMethod,
256+
onChanged: (bool value) {
257+
setState(() {
258+
ConfigSetting().addCopyMethod = value;
259+
});
260+
},
261+
),
253262
],
254263
);
255264
return Container(

0 commit comments

Comments
 (0)