execute method

  1. @override
Future<void> execute(
  1. {required CancelToken cancelToken,
  2. required TestReport report,
  3. required TestController tester}
)
override

Attempts to go back by finding the Flutter built in back button and tapping it.

Implementation

@override
Future<void> execute({
  required CancelToken cancelToken,
  required TestReport report,
  required TestController tester,
}) async {
  log(
    '$id',
    tester: tester,
  );

  var backButton = find.byTooltip('Back');
  var evaluated = backButton.evaluate().toList();
  if (evaluated.isEmpty == true) {
    backButton = find.byType(CupertinoNavigationBarBackButton);

    evaluated = backButton.evaluate().toList();
    if (evaluated.isEmpty == true) {
      throw Exception('Unable to locate Back button.');
    }
  }

  if (cancelToken.cancelled == true) {
    throw Exception('[CANCELLED]: step was cancelled by the test');
  }

  if (evaluated.length > 1) {
    var error =
        '[ERROR]: found (${evaluated.length}) widgets; expected only one.';
    var index = 0;
    for (var w in evaluated) {
      error += '\n  ${++index}: ${w.widget.runtimeType} [${w.widget.key}]';
    }
    throw Exception(error);
  }

  await driver.tap(backButton);
}