convertMixedToSnake static method

String convertMixedToSnake(
  1. String convert
)

Implementation

static String convertMixedToSnake(String convert) {
  final tokens = <String>[];
  final currentToken = StringBuffer();

  for(var i = 0; i < convert.length; i++) {
    final currentChar = convert[i];
    final isUpper = int.tryParse(currentChar) == null && currentChar == currentChar.toUpperCase();
    if(isUpper && i > 0) {
      final prevChar = convert[i-1];
      final prevIsUpper = prevChar == prevChar.toUpperCase();
      final nextChar = (i+1 < convert.length) ? convert[i+1] : prevChar;
      final nextIsUpper = nextChar == nextChar.toUpperCase();
      if(!prevIsUpper || !nextIsUpper) {
        tokens.add(currentToken.toString());
        currentToken.clear();
      }
    }

    currentToken.write(currentChar);
  }

  if(currentToken.isNotEmpty) {
    tokens.add(currentToken.toString());
  }

  final allLower = tokens.map((x) => x.toLowerCase());
  return allLower.join("_");
}