scrollUntilVisible method Null safety
Repeatedly scrolls a Scrollable by delta
in the
Scrollable.axisDirection direction until a widget matching finder
is
visible.
Between each scroll, advances the clock by duration
time.
Scrolling is performed until the start of the finder
is visible. This is
due to the default parameter values of the Scrollable.ensureVisible method.
If scrollable
is null
, a Finder that looks for a Scrollable is
used instead.
Throws a StateError if finder
is not found after maxScrolls
scrolls.
This is different from ensureVisible in that this allows looking for
finder
that is not yet built. The caller must specify the scrollable
that will build child specified by finder
when there are multiple
Scrollables.
See also:
- dragUntilVisible, which implements the body of this method.
Implementation
Future<void> scrollUntilVisible(
Finder finder,
double delta, {
Finder? scrollable,
int maxScrolls = 50,
Duration duration = const Duration(milliseconds: 50),
}
) {
assert(maxScrolls > 0);
scrollable ??= find.byType(Scrollable);
return TestAsyncUtils.guard<void>(() async {
Offset moveStep;
switch (widget<Scrollable>(scrollable!).axisDirection) {
case AxisDirection.up:
moveStep = Offset(0, delta);
break;
case AxisDirection.down:
moveStep = Offset(0, -delta);
break;
case AxisDirection.left:
moveStep = Offset(delta, 0);
break;
case AxisDirection.right:
moveStep = Offset(-delta, 0);
break;
}
await dragUntilVisible(
finder,
scrollable,
moveStep,
maxIteration: maxScrolls,
duration: duration,
);
});
}