rebuild method

void rebuild({
  1. required List<int> lineLengths,
  2. required double height,
  3. Set<int> foldedLines = const {},
})

Implementation

void rebuild({
  required List<int> lineLengths,
  required double height,
  Set<int> foldedLines = const {},
}) {
  final lineCount = lineLengths.length;
  if (lineCount <= 0) {
    _root = _LayoutLeaf();
    return;
  }

  final leaves = <_LayoutNode>[];
  for (var start = 0; start < lineCount; start += _LayoutLeaf._capacity) {
    final end = math.min(start + _LayoutLeaf._capacity, lineCount);
    final lines = <_LineBlock>[];
    for (var line = start; line < end; line++) {
      lines.add(
        _LineBlock(lineLengths[line], height, foldedLines.contains(line)),
      );
    }
    leaves.add(_LayoutLeaf(lines));
  }

  var level = leaves;
  while (level.length > _nodeCapacity) {
    final nextLevel = <_LayoutNode>[];
    for (var start = 0; start < level.length; start += _nodeCapacity) {
      nextLevel.add(
        _LayoutInternal(
          level.sublist(start, math.min(start + _nodeCapacity, level.length)),
        ),
      );
    }
    level = nextLevel;
  }
  _root = level.length == 1 ? level.single : _LayoutInternal(level);
}