onKey method

  1. @override
bool onKey(
  1. KeyEvent event,
  2. RenderContext ctx
)
override

Implementation

@override
bool onKey(KeyEvent event, RenderContext ctx) {
  if (!scrollable) return false;
  final s = state!;
  final lines = code.split('\n').length;
  // Without a precise viewport here we clamp conservatively; the renderer
  // re-clamps against the actual visible height on the next draw.
  final maxOff = lines > 0 ? lines - 1 : 0;
  switch (event.key) {
    case NamedKey.arrowUp:
      if (s.scrollOffset > 0) s.scrollOffset--;
      return true;
    case NamedKey.arrowDown:
      if (s.scrollOffset < maxOff) s.scrollOffset++;
      return true;
    case NamedKey.pageUp:
      s.scrollOffset = (s.scrollOffset - pageStep).clamp(0, maxOff);
      return true;
    case NamedKey.pageDown:
      s.scrollOffset = (s.scrollOffset + pageStep).clamp(0, maxOff);
      return true;
    case NamedKey.home:
      s.scrollOffset = 0;
      return true;
    case NamedKey.end:
      s.scrollOffset = maxOff;
      return true;
    default:
      return false;
  }
}