commandPaletteVisibleWindow function

CommandPaletteWindow commandPaletteVisibleWindow({
  1. required int itemCount,
  2. required int selectedIndex,
  3. required int viewportSize,
})

Centers selectedIndex inside a window of viewportSize items.

Implementation

CommandPaletteWindow commandPaletteVisibleWindow({
  required int itemCount,
  required int selectedIndex,
  required int viewportSize,
}) {
  final size = viewportSize < 1 ? 1 : viewportSize;
  if (itemCount <= 0) {
    return CommandPaletteWindow(
      start: 0,
      end: 0,
      selectedIndex: 0,
      itemCount: 0,
      viewportSize: size,
    );
  }
  final selected = selectedIndex.clamp(0, itemCount - 1);
  final maxStart = (itemCount - size).clamp(0, itemCount);
  final start = (selected - size ~/ 2).clamp(0, maxStart);
  final end = (start + size).clamp(start, itemCount);
  return CommandPaletteWindow(
    start: start,
    end: end,
    selectedIndex: selected,
    itemCount: itemCount,
    viewportSize: size,
  );
}