onSelectedRowChanged method
Called when the selectedRow property in SfDataGrid.controller is changed.
Implementation
@override
void onSelectedRowChanged() {
final DataGridConfiguration dataGridConfiguration =
_dataGridStateDetails!();
if (dataGridConfiguration.selectionMode == SelectionMode.none) {
return;
}
final DataGridRow? newValue = dataGridConfiguration.controller.selectedRow;
bool canClearSelections() =>
_selectedRows.isNotEmpty &&
dataGridConfiguration.selectionMode != SelectionMode.multiple;
//If newValue is negative we have clear the whole selection data.
if (newValue == null && _selectedRows.isNotEmpty) {
// If selection mode is multiple we need to clear all the selected rows.
if (dataGridConfiguration.selectionMode == SelectionMode.multiple) {
_clearSelectedRows(dataGridConfiguration);
} else {
_clearSelectedRow(dataGridConfiguration);
}
if (dataGridConfiguration.navigationMode == GridNavigationMode.cell) {
_clearCurrentCell(dataGridConfiguration);
}
notifyListeners();
return;
}
final int recordIndex =
effectiveRows(dataGridConfiguration.source).indexOf(newValue!);
final int rowIndex =
grid_helper.resolveToRowIndex(dataGridConfiguration, recordIndex);
if (rowIndex < grid_helper.getHeaderIndex(dataGridConfiguration)) {
return;
}
if (!_selectedRows.contains(newValue)) {
//In multiple case we shouldn't to clear the collection as
// well source properties.
if (canClearSelections()) {
_clearSelectedRow(dataGridConfiguration);
}
if (dataGridConfiguration.navigationMode == GridNavigationMode.cell) {
_addCurrentCell(newValue, dataGridConfiguration,
isSelectionChanging: true);
} else {
final int columnIndex =
grid_helper.resolveToStartColumnIndex(dataGridConfiguration);
final int rowIndex =
selection_helper.resolveToRowIndex(dataGridConfiguration, newValue);
dataGridConfiguration.currentCell
._updateCurrentRowColumnIndex(rowIndex, columnIndex);
}
_addSelection(newValue, dataGridConfiguration);
notifyListeners();
}
}