rebuild method

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

Implementation

void rebuild({
  required int lineCount,
  required double height,
  Set<int> foldedLines = const {},
}) {
  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);
    leaves.add(
      _LayoutLeaf([
        for (var line = start; line < end; line++)
          _LineBlock(height, foldedLines.contains(line)),
      ]),
    );
  }

  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);
}