handleKeyEvent method

  1. @override
Future<void> handleKeyEvent(
  1. KeyEvent keyEvent
)
override

Processes the selection operation when SfDataGrid receives raw keyboard event.

Implementation

@override
Future<void> handleKeyEvent(KeyEvent keyEvent) async {
  final DataGridConfiguration dataGridConfiguration =
      _dataGridStateDetails!();
  if (dataGridConfiguration.currentCell.isEditing &&
      keyEvent.logicalKey != LogicalKeyboardKey.escape) {
    if (!await dataGridConfiguration.currentCell
        .canSubmitCell(dataGridConfiguration)) {
      return;
    }

    await dataGridConfiguration.currentCell
        .onCellSubmit(dataGridConfiguration, cancelCanSubmitCell: true);
  }

  if (keyEvent.logicalKey == LogicalKeyboardKey.tab) {
    _processKeyTab(keyEvent);
  }

  if (keyEvent.logicalKey == LogicalKeyboardKey.home) {
    _processHomeKey(dataGridConfiguration, keyEvent);
  }

  if (keyEvent.logicalKey == LogicalKeyboardKey.end) {
    _processEndKey(dataGridConfiguration, keyEvent);
  }

  if (keyEvent.logicalKey == LogicalKeyboardKey.pageUp) {
    _processPageUp();
  }

  if (keyEvent.logicalKey == LogicalKeyboardKey.pageDown) {
    _processPageDown();
  }

  if (keyEvent.logicalKey == LogicalKeyboardKey.arrowUp) {
    _processKeyUp(keyEvent);
  }

  if (keyEvent.logicalKey == LogicalKeyboardKey.arrowDown ||
      keyEvent.logicalKey == LogicalKeyboardKey.enter) {
    _processKeyDown(keyEvent);
    if (keyEvent.logicalKey == LogicalKeyboardKey.enter) {
      return;
    }
  }

  if (keyEvent.logicalKey == LogicalKeyboardKey.arrowLeft) {
    if (dataGridConfiguration.textDirection == TextDirection.rtl) {
      _processKeyRight(dataGridConfiguration, keyEvent);
    } else {
      _processKeyLeft(dataGridConfiguration, keyEvent);
    }
  }

  if (keyEvent.logicalKey == LogicalKeyboardKey.arrowRight) {
    if (dataGridConfiguration.textDirection == TextDirection.rtl) {
      _processKeyLeft(dataGridConfiguration, keyEvent);
    } else {
      _processKeyRight(dataGridConfiguration, keyEvent);
    }
  }

  if (keyEvent.logicalKey == LogicalKeyboardKey.keyA) {
    if (HardwareKeyboard.instance.isControlPressed) {
      _processSelectedAll();
    }
  }

  if (keyEvent.logicalKey == LogicalKeyboardKey.space) {
    _processSpaceKey();
  }

  if (keyEvent.logicalKey == LogicalKeyboardKey.f2) {
    if (dataGridConfiguration.allowEditing &&
        dataGridConfiguration.navigationMode == GridNavigationMode.cell) {
      final RowColumnIndex rowColumnIndex = RowColumnIndex(
          dataGridConfiguration.currentCell.rowIndex,
          dataGridConfiguration.currentCell.columnIndex);
      dataGridConfiguration.currentCell.onCellBeginEdit(
          editingRowColumnIndex: rowColumnIndex,
          isProgrammatic: true,
          needToResolveIndex: false);
    }
  }

  if (keyEvent.logicalKey == LogicalKeyboardKey.escape) {
    if (dataGridConfiguration.allowEditing &&
        dataGridConfiguration.navigationMode == GridNavigationMode.cell &&
        dataGridConfiguration.currentCell.isEditing) {
      await dataGridConfiguration.currentCell
          .onCellSubmit(dataGridConfiguration, isCellCancelEdit: true);
    }
  }
}