move method
Future<void>
move(
- TraversalDirection direction,
- TextDirection textDirection, {
- Duration duration = const Duration(milliseconds: 200),
- Curve curve = Curves.ease,
inherited
Moves focus one date horizontally or one row vertically in direction, honoring textDirection. Skips
unselectable dates and pages across as needed. Does nothing if no selectable date exists in that direction within
start and end.
Testing
To avoid timeouts in widget tests, always wrap the returned Future in unawaited.
testWidgets('shows', (tester) async {
await tester.pumpWidget(...);
unawaited(controller.show());
await tester.pumpAndSettle();
});
Implementation
Future<void> move(
TraversalDirection direction,
TextDirection textDirection, {
Duration duration = const Duration(milliseconds: 200),
Curve curve = Curves.ease,
}) async {
final step = switch ((direction, textDirection)) {
(.left, .ltr) || (.right, .rtl) => -1,
(.right, .ltr) || (.left, .rtl) => 1,
(.up, _) => -_columns,
(.down, _) => _columns,
};
var next = _step(_focused ?? _current, step);
while (!next.isBefore(start) && !next.isAfter(end)) {
if (_selectable(next)) {
await focus(next, duration: duration, curve: curve);
return;
}
next = _step(next, step);
}
}