run method

RangeResult run({
  1. required void render(
    1. FrameContext ctx,
    2. num start,
    3. num end,
    4. bool editingStart,
    ),
  2. KeyBindings? extraBindings,
})

Runs the range value prompt.

Implementation

RangeResult run({
  required void Function(
    FrameContext ctx,
    num start,
    num end,
    bool editingStart,
  ) render,
  KeyBindings? extraBindings,
}) {
  _initState();

  _bindings = KeyBindings([
        KeyBinding.multi(
          {KeyEventType.arrowUp, KeyEventType.arrowDown, KeyEventType.space},
          (event) {
            _editingStart = !_editingStart;
            return KeyActionResult.handled;
          },
          hintLabel: '↑/↓/Space',
          hintDescription: 'toggle handle',
        ),
      ]) +
      KeyBindings.horizontalNavigation(
        onLeft: () {
          if (_editingStart) {
            _start = math.max(min, _start - step);
            if (_start > _end) _end = _start;
          } else {
            _end = math.max(min, _end - step);
            if (_end < _start) _start = _end;
          }
          _start = _start.clamp(min, max);
          _end = _end.clamp(min, max);
        },
        onRight: () {
          if (_editingStart) {
            _start = math.min(max, _start + step);
            if (_start > _end) _end = _start;
          } else {
            _end = math.min(max, _end + step);
            if (_end < _start) _start = _end;
          }
          _start = _start.clamp(min, max);
          _end = _end.clamp(min, max);
        },
      ) +
      KeyBindings.prompt(onCancel: () => _cancelled = true);

  if (extraBindings != null) {
    _bindings = _bindings + extraBindings;
  }

  final frame = FrameView(
    title: title,
    theme: theme,
    bindings: _bindings,
  );

  void renderFrame(RenderOutput out) {
    frame.render(out, (ctx) {
      render(ctx, _start, _end, _editingStart);
    });
  }

  final runner = PromptRunner(hideCursor: true);
  final result = runner.runWithBindings(
    render: renderFrame,
    bindings: _bindings,
  );

  return (result == PromptResult.cancelled || _cancelled)
      ? RangeResult(start: startInitial, end: endInitial)
      : RangeResult(start: _start, end: _end);
}