parseTrackList static method

List<GridTrackSize> parseTrackList(
  1. String value,
  2. RenderStyle renderStyle,
  3. String propertyName,
  4. Axis axis,
)

Implementation

static List<GridTrackSize> parseTrackList(
  String value,
  RenderStyle renderStyle,
  String propertyName,
  Axis axis,
) {
  final String trimmed = value.trim();
  if (trimmed.isEmpty) {
    return const <GridTrackSize>[];
  }
  if ((propertyName == GRID_TEMPLATE_COLUMNS || propertyName == GRID_TEMPLATE_ROWS) &&
      trimmed.toLowerCase().startsWith('subgrid')) {
    final String rest = trimmed.substring(7).trim();
    if (rest.isEmpty) return const <GridTrackSize>[GridSubgrid()];

    final List<String> tokens = _splitBySpacePreservingFunc(rest);
    final List<List<String>> lineNameGroups = <List<String>>[];
    for (final String token in tokens) {
      final String t = token.trim();
      if (t.isEmpty) continue;
      if (!_isLineNameToken(t)) {
        return const <GridTrackSize>[];
      }
      lineNameGroups.add(_parseLineNames(t));
    }
    return <GridTrackSize>[GridSubgrid(lineNameGroups: lineNameGroups)];
  }
  // For template track lists, `none` represents "no explicit tracks".
  // Represent this as an empty list so that layout can fall back to
  // auto tracks and computed-style serialization can emit `none`.
  if (trimmed.toLowerCase() == 'none') {
    return const <GridTrackSize>[];
  }
  return _parseTrackListInternal(trimmed, renderStyle, propertyName, axis);
}