onSelectedRowsChanged method
Called when the selectedRows property in SfDataGrid.controller is changed.
Implementation
@override
void onSelectedRowsChanged() {
final DataGridConfiguration dataGridConfiguration =
_dataGridStateDetails!();
if (dataGridConfiguration.selectionMode != SelectionMode.multiple ||
dataGridConfiguration.selectionMode == SelectionMode.none) {
return;
}
final List<DataGridRow> newValue = dataGridConfiguration
.controller
.selectedRows
.toList(growable: false);
if (newValue.isEmpty) {
_clearSelectedRows(dataGridConfiguration);
notifyListeners();
return;
}
_clearSelectedRows(dataGridConfiguration);
final List<DataGridRow> visibleRows =
newValue
.where(
(row) =>
effectiveRows(dataGridConfiguration.source).contains(row),
)
.toList();
_selectedRows.addAll(visibleRows);
dataGridConfiguration.controller.selectedRows.addAll(visibleRows);
_refreshSelection();
dataGridConfiguration.container
..isDirty = true
..refreshView();
_updateCheckboxStateOnHeader(dataGridConfiguration);
if (dataGridConfiguration.navigationMode == GridNavigationMode.cell &&
_selectedRows.isNotEmpty) {
final DataGridRow lastRecord = _selectedRows.last;
_addCurrentCell(
lastRecord,
dataGridConfiguration,
isSelectionChanging: true,
);
} else if (dataGridConfiguration.isDesktop &&
dataGridConfiguration.navigationMode == GridNavigationMode.row) {
final DataGridRow lastRecord = _selectedRows.last;
final int rowIndex = selection_helper.resolveToRowIndex(
dataGridConfiguration,
lastRecord,
);
dataGridConfiguration.currentCell._updateBorderForMultipleSelection(
dataGridConfiguration,
nextRowColumnIndex: RowColumnIndex(rowIndex, -1),
);
}
notifyListeners();
}