handleKeyAction method

void handleKeyAction(
  1. String key
)

Implementation

void handleKeyAction(String key) {
  final level = dialogLevel.value;

  switch (key) {
    case 'up':
      if (selectedIndex.value > 0) selectedIndex.value--;
      break;
    case 'down':
      final maxIdx = level.type == _DialogLevelType.teammateList
          ? teammateStatuses.length - 1
          : 0;
      if (selectedIndex.value < maxIdx) selectedIndex.value++;
      break;
    case 'enter':
      if (level.type == _DialogLevelType.teammateList) {
        selectTeammate(selectedIndex.value);
      }
      break;
    case 'left':
      if (level.type == _DialogLevelType.teammateDetail) {
        goBackToList();
      }
      break;
    case 'escape':
      if (level.type == _DialogLevelType.teammateDetail) {
        goBackToList();
      } else {
        onDone();
      }
      break;
    case 'k':
      final target = level.type == _DialogLevelType.teammateList
          ? (teammateStatuses.isNotEmpty
                ? teammateStatuses[selectedIndex.value]
                : null)
          : currentTeammate;
      if (target != null) {
        killTeammate(target);
        if (level.type == _DialogLevelType.teammateDetail) {
          goBackToList();
        }
      }
      break;
    case 's':
      final shutdownTarget = level.type == _DialogLevelType.teammateList
          ? (teammateStatuses.isNotEmpty
                ? teammateStatuses[selectedIndex.value]
                : null)
          : currentTeammate;
      if (shutdownTarget != null) {
        shutdownTeammate(shutdownTarget);
        if (level.type == _DialogLevelType.teammateDetail) {
          goBackToList();
        }
      }
      break;
    case 'h':
      final hideTarget = level.type == _DialogLevelType.teammateList
          ? (teammateStatuses.isNotEmpty
                ? teammateStatuses[selectedIndex.value]
                : null)
          : currentTeammate;
      if (hideTarget != null) {
        toggleTeammateVisibility(hideTarget);
        if (level.type == _DialogLevelType.teammateDetail) {
          goBackToList();
        }
      }
      break;
    case 'p':
      if (level.type == _DialogLevelType.teammateList) {
        pruneIdleTeammates();
      }
      break;
  }
}