splitTypes function

List<String> splitTypes(
  1. String typesStr
)

Implementation

List<String> splitTypes(String typesStr) {
  if(typesStr.isEmpty) {
    return [];
  }
  var currentStart = 0;
  List<String> subTypes = [];
  List<String> parentheses = [];
  for(var i = 0; i < typesStr.length; i++) {
    var c = typesStr[i];
    switch(c) {
      case '(':
      case '[':
        parentheses.add(c);
        break;
      case ')':
        var pop = parentheses.removeLast();
        assert(pop == '(');
        break;
      case ']':
        var pop = parentheses.removeLast();
        assert(pop == '[');
        break;
      case ',':
        if(parentheses.isEmpty) {
          subTypes.add(typesStr.substring(currentStart, i));
          currentStart = i + 1;
        }
        break;
    }
  }

  if(currentStart < typesStr.length) {
    subTypes.add(typesStr.substring(currentStart));
  }
  return subTypes;
}