waitForInitialWidgets static method

Future<void> waitForInitialWidgets(
  1. WidgetTester tester, {
  2. EnsembleTestCase? testCase,
})

Implementation

static Future<void> waitForInitialWidgets(
  WidgetTester tester, {
  EnsembleTestCase? testCase,
}) async {
  final keysToWait = <String>[];
  if (testCase != null) {
    for (final step in testCase.steps) {
      if (step.type != 'expectVisible' && step.type != 'tap') {
        break;
      }
      final id = step.args['id']?.toString();
      if (id != null && id.isNotEmpty) keysToWait.add(id);
    }
  }

  await tester.pump();
  await _yieldToRealAsyncWork(tester);
  for (var i = 0; i < 80; i++) {
    if (keysToWait.isEmpty ||
        keysToWait.every(
          (id) => find.byKey(ValueKey(id)).evaluate().isNotEmpty,
        )) {
      return;
    }
    await tester.pump(const Duration(milliseconds: 100));
    await _yieldToRealAsyncWork(tester);
  }

  if (keysToWait.isNotEmpty) {
    throw EnsembleTestFailure(
      'Timed out waiting for widgets: ${keysToWait.join(", ")}',
    );
  }
}