run method
RangeResult
run({
- required void render(
- FrameContext ctx,
- num start,
- num end,
- bool editingStart,
- 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);
}