pump method

  1. @override
Future<void> pump(
  1. [Duration? duration,
  2. EnginePhase newPhase = EnginePhase.sendSemanticsUpdate]
)
override

Triggers a frame sequence (build/layout/paint/etc), then flushes microtasks.

If duration is set, then advances the clock by that much first. Doing this flushes microtasks.

The supplied EnginePhase is the final phase reached during the pump pass; if not supplied, the whole pass is executed.

See also LiveTestWidgetsFlutterBindingFramePolicy, which affects how this method works when the test is run with flutter run.

Implementation

@override
Future<void> pump([ Duration? duration, EnginePhase newPhase = EnginePhase.sendSemanticsUpdate ]) {
  assert(newPhase == EnginePhase.sendSemanticsUpdate);
  assert(inTest);
  assert(!_expectingFrame);
  assert(_pendingFrame == null);
  if (framePolicy == LiveTestWidgetsFlutterBindingFramePolicy.benchmarkLive) {
    // Ignore all pumps and just wait.
    return delayed(duration ?? Duration.zero);
  }
  return TestAsyncUtils.guard<void>(() {
    if (duration != null) {
      Timer(duration, () {
        _expectingFrame = true;
        scheduleFrame();
      });
    } else {
      _expectingFrame = true;
      scheduleFrame();
    }
    _pendingFrame = Completer<void>();
    return _pendingFrame!.future;
  });
}