reconcileDataRows method

void reconcileDataRows(
  1. List<TreeRowNode> dataNodes,
  2. List<HeaderRow> headerRowList, {
  3. int pageStartIndex = 0,
})

Rebuilds data rows while reusing existing TreeRow instances for unchanged row keys.

Implementation

void reconcileDataRows(
  List<TreeRowNode> dataNodes,
  List<hr.HeaderRow> headerRowList, {
  int pageStartIndex = 0,
}) {
  final oldRows = Set<TreeRow>.identity();
  _collectRows(buildedDataRows, oldRows);
  final newRows = <TreeRow>[];
  final existingRowsByKey = <Object, TreeRow>{};
  _indexRowsByKey(buildedDataRows, existingRowsByKey);
  _indexRowsByKey(_detachedRowsByKey.values, existingRowsByKey);

  for (int rowIndex = 0; rowIndex < dataNodes.length; rowIndex++) {
    newRows.add(
      _buildOrReuseDataColumns(
        dataNodes,
        rowIndex,
        headerRowList,
        parentIndexes: [pageStartIndex],
        existingRowsByKey: existingRowsByKey,
      ),
    );
  }

  _detachRowsMissingFromTree(oldRows, newRows);

  buildedDataRows
    ..clear()
    ..addAll(newRows);
}