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;
 | |
| }
 |