generateFields method
void
generateFields(})
Generate the fields for the
model nested from keys.
Implementation
void generateFields(
final StringBuffer buffer,
final Map<String, Object?> assetsMap,
final String name, {
final Iterable<String> keys = const Iterable<String>.empty(),
}) {
final Map<String, List<String>> uniqueKeys = <String, List<String>>{};
final Map<String, Object?> map = keys.skip(1).isEmpty && name == baseName
? assetsMap
: assetsMap.getNested(<String>[...keys.skip(1), name])!
as Map<String, Object?>;
for (final MapEntry<String, Object?> entry in map.entries) {
if (entry.key.isNotEmpty && entry.value is String) {
String key = basenameWithoutExtension(entry.key);
key = convert ? key.toCamelCase() : key.normalize();
final String $extension = extension(entry.key);
while ((uniqueKeys[key] ?? const <String>[]).contains($extension)) {
key = '\$$key';
}
uniqueKeys[key] = <String>[...?uniqueKeys[key], $extension];
}
}
final Map<String, int> uniqueKeysLength = <String, int>{
for (final MapEntry<String, List<String>> entry in uniqueKeys.entries)
entry.key: entry.value.length
};
for (final MapEntry<String, Object?> entry in map.entries) {
final Object? value = entry.value;
if (entry.key.isEmpty) {
} else if (value is Map<String, Object?>) {
final String key =
convert ? entry.key.toCamelCase() : entry.key.normalize();
final String cls = className(entry.key, <String>[...keys, name]);
final Map<String, Object?> nestedMap =
map[entry.key]! as Map<String, Object?>;
final String nestedMapPath = nestedMap['']! as String;
final Iterable<String> dirParts =
posix.split(posix.dirname(nestedMapPath));
buffer
..writeDoc(
'The path to the `${posix.basename(nestedMapPath)}` folder '
'in `${dirParts.join('`/`')}`.',
)
..writeln('$cls get $key => $cls._(this);');
} else if (value is String) {
String key = basenameWithoutExtension(entry.key);
key = convert ? key.toCamelCase() : key.normalize();
final String $extension = extension(entry.key);
while (!uniqueKeys[key]!.contains($extension)) {
key = '\$$key';
}
uniqueKeys[key]!.remove($extension);
if (uniqueKeysLength[key]! > 1) {
key = basename(entry.key);
key =
convert ? key.toCamelCase() : key.replaceAll('.', '').normalize();
}
final Iterable<String> dirParts = posix.split(posix.dirname(value));
buffer
..writeDoc(
'The path to the `${posix.basename(value)}` in '
'`${dirParts.join('`/`')}`.',
)
..writeFunction(
'String get $key',
bodyConstructor: value.contains(r'$') ? "r'" : "'",
bodyFields: posix.split(value),
separator: posix.separator,
);
}
}
}