import 'package:flutter_test/flutter_test.dart'; /// Workaround for https://github.com/flutter/flutter/issues/88765 extension WaitForExtension on WidgetTester { Future waitFor( Finder finder, { Duration timeout = const Duration(seconds: 20), bool skipPumpAndSettle = false, }) async { final end = DateTime.now().add(timeout); do { if (DateTime.now().isAfter(end)) { throw Exception('Timed out waiting for $finder'); } if (!skipPumpAndSettle) { await pumpAndSettle(); } await Future.delayed(const Duration(milliseconds: 100)); } while (finder.evaluate().isEmpty); } } extension MaybeUppercaseFinder on CommonFinders { /// On Android some button labels are in uppercase while on iOS they /// are not. This method tries both. Finder maybeUppercaseText( String text, { bool findRichText = false, bool skipOffstage = true, }) { try { final finder = find.text( text.toUpperCase(), findRichText: findRichText, skipOffstage: skipOffstage, ); expect(finder, findsOneWidget); return finder; } catch (_) { return find.text( text, findRichText: findRichText, skipOffstage: skipOffstage, ); } } }