tapWidget function
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());
}
}