insert method

void insert(
  1. DiagramElement element, {
  2. String? after,
  3. String? before,
})

Inserts a new identity at the end, or next to an existing after or before element. At most one anchor may be supplied.

Implementation

void insert(DiagramElement element, {String? after, String? before}) {
  if (contains(element.id)) {
    throw StateError('Element ${element.id} already exists.');
  }
  if (after != null && before != null) {
    throw ArgumentError('Insert after or before one element, not both.');
  }
  final anchor = after ?? before;
  if (anchor != null && !contains(anchor)) {
    throw StateError('Anchor element $anchor does not exist.');
  }
  // A removed base identity stays removed at its previous position.
  _inserted[element.id] = element;
  if (after != null) {
    (_after[after] ??= []).add(element.id);
  } else if (before != null) {
    (_before[before] ??= []).add(element.id);
  } else {
    _appended.add(element.id);
  }
}