toSnakeCase method

String toSnakeCase()

Converts camelCase or PascalCase to snake_case

Implementation

String toSnakeCase() {
  var parts = <String>[];
  var i = 0;
  var wordStarts = _toSnakeCaseRegExp.allMatches(this);
  for (var RegExpMatch(:start) in wordStarts) {
    if (i < start) {
      parts.add(substring(i, start).toLowerCase());
      i = start;
    }
    if (this[i] == '_' && parts.isNotEmpty) {
      // Avoid doubling up the `_`. This handles strings that are already in
      // snake case like `foo_Bar` (which translates to `foo_bar`).
      i++;
    }
  }
  if (i < length) {
    parts.add(substring(i).toLowerCase());
  }
  return parts.join('_');
}