toCamelCase function
Converts a snake_case field name to lowerCamelCase.
Splits on underscores and capitalizes the first letter of each segment after the first. Leading/trailing underscores are preserved as empty segments (dropped by split), matching protobuf's canonical JSON name generation.
Examples: "foo_bar" -> "fooBar" "foo_bar_baz" -> "fooBarBaz" "foo" -> "foo" "" -> ""
Implementation
String toCamelCase(String snakeCase) {
if (snakeCase.isEmpty) return snakeCase;
// Preserve leading underscores.
int leadingUnderscores = 0;
while (leadingUnderscores < snakeCase.length &&
snakeCase[leadingUnderscores] == '_') {
leadingUnderscores++;
}
final prefix = snakeCase.substring(0, leadingUnderscores);
final rest = snakeCase.substring(leadingUnderscores);
if (rest.isEmpty) return snakeCase;
final parts = rest.split('_');
final buffer = StringBuffer(prefix);
buffer.write(parts[0]);
for (int i = 1; i < parts.length; i++) {
final part = parts[i];
if (part.isEmpty) continue;
buffer.write(part[0].toUpperCase());
if (part.length > 1) {
buffer.write(part.substring(1));
}
}
return buffer.toString();
}