tapWidget function

Future<TapResult> tapWidget(
  1. TapInput input
)

Taps a widget or coordinates in the running Flutter app.

Handles selector-based taps, coordinate taps, and @N describe-ref taps. The retry loop (500ms poll until deadline) runs inside this function. Never throws; all error conditions are represented as sealed result cases.

Implementation

Future<TapResult> tapWidget(TapInput input) async {
  try {
    final isolateId = await checkFdbHelper();
    if (isolateId == null) return const TapNoFdbHelper();

    if (input.describeRef != null) {
      return _tapByRef(isolateId, input.describeRef!, input.timeoutSeconds);
    }

    return _tapWithParams(isolateId, input);
  } on AppDiedException catch (e) {
    return TapAppDied(logLines: e.logLines, reason: e.reason);
  } catch (e) {
    return TapError(e.toString());
  }
}