validationErrors method

List<String> validationErrors()

Validates structural invariants and returns one or more descriptive errors.

Implementation

List<String> validationErrors() {
  final errors = <String>[];

  final paneIdList = _collectPaneIds(root);
  final paneIdSet = paneIdList.toSet();
  if (paneIdList.isEmpty) {
    errors.add('root must contain at least one pane');
  }
  if (paneIdList.length != paneIdSet.length) {
    errors.add('pane ids must be unique');
  }

  final splitIds = _collectSplitIds(root);
  final splitIdSet = splitIds.toSet();
  if (splitIds.length != _countSplits(root)) {
    errors.add('split ids must be unique');
  }
  if (splitIds.length != splitIdSet.length) {
    errors.add('split ids must be unique');
  }

  if (paneMinWidth < 1 || paneMinHeight < 1) {
    errors.add('pane minimums must be >=1');
  }

  if (root is PaneSplit) {
    if (!_validateSplitNode(root as PaneSplit, errors)) {
      errors.add('split ratios must be finite within (0, 1)');
    }
  } else if (root is PaneLeaf && !paneIdSet.contains(focusedPaneId)) {
    errors.add('focusedPaneId must exist in tree');
  }

  if (!paneIdSet.contains(focusedPaneId)) {
    errors.add('focusedPaneId must exist in tree');
  }

  return errors;
}