splitParams method

List<String> splitParams(
  1. String input
)

Implementation

List<String> splitParams(String input) {
  final list = <String>[];
  final currentParam = StringBuffer();
  var nestedLevel = 0;

  void addCurrent() {
    if (currentParam.isNotEmpty) {
      final param = currentParam.toString().trim();

      if (param.isNotEmpty) list.add(param);
      currentParam.clear();
    }
  }

  for (var i = 0; i < input.length; i++) {
    final char = input[i];

    if (char == ',' && nestedLevel == 0) {
      addCurrent();
    } else {
      // handle subtypes & records
      if (char == '<' || char == '(') nestedLevel++;
      if (char == '>' || char == ')') nestedLevel--;
      if (nestedLevel < 0) nestedLevel = 0;
      currentParam.write(char);
    }
  }
  addCurrent(); // add the last param, if any

  return list;
}