31 lines
818 B
Dart
31 lines
818 B
Dart
String _upperCamelToLowerSnake(String input) {
|
|
final regex = RegExp(r'(?<=[a-z0-9])([A-Z])');
|
|
return input
|
|
.replaceAllMapped(regex, (match) => '_${match.group(0)}')
|
|
.toLowerCase();
|
|
}
|
|
|
|
Map<String, dynamic> convertMapKeysToSnakeCase(Map<String, dynamic> input) {
|
|
final result = <String, dynamic>{};
|
|
|
|
input.forEach((key, value) {
|
|
final newKey = _upperCamelToLowerSnake(key);
|
|
|
|
if (value is Map<String, dynamic>) {
|
|
result[newKey] = convertMapKeysToSnakeCase(value);
|
|
} else if (value is List) {
|
|
result[newKey] =
|
|
value.map((item) {
|
|
if (item is Map<String, dynamic>) {
|
|
return convertMapKeysToSnakeCase(item);
|
|
}
|
|
return item;
|
|
}).toList();
|
|
} else {
|
|
result[newKey] = value;
|
|
}
|
|
});
|
|
|
|
return result;
|
|
}
|