Created
December 25, 2022 14:08
-
-
Save felipecastrosales/c1aa0c23f75f778009d5ffdbe9651404 to your computer and use it in GitHub Desktop.
my overlay
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// error | |
══╡ EXCEPTION CAUGHT BY FLUTTER TEST FRAMEWORK ╞════════════════════════════════════════════════════ | |
The following assertion was thrown running a test: | |
Navigator operation requested with a context that does not include a Navigator. | |
The context used to push or pop routes from the Navigator must be that of a widget that is a | |
descendant of a Navigator widget. | |
// method | |
import 'package:dialog/overlayimage/overlay.dart'; | |
import 'package:flutter/material.dart'; | |
void showOverlayMethod(BuildContext context) { | |
Navigator.of(context).push( | |
MyOverlayImage( | |
foregroundColor: Colors.red.withOpacity(.5), | |
), | |
); | |
} | |
// test | |
import 'package:dialog/overlayimage/overlay.dart'; | |
import 'package:dialog/show_overlay_method.dart'; | |
import 'package:flutter/material.dart'; | |
import 'package:flutter_test/flutter_test.dart'; | |
import 'package:mocktail/mocktail.dart'; | |
import 'package:network_image_mock/network_image_mock.dart'; | |
class MockBuildContext extends Mock implements BuildContext {} | |
class MockNavigatorObserver extends Mock implements NavigatorObserver {} | |
void main() { | |
TestWidgetsFlutterBinding.ensureInitialized(); | |
late BuildContext mockContext; | |
late MockNavigatorObserver mockObserver; | |
setUp(() { | |
mockContext = MockBuildContext(); | |
mockObserver = MockNavigatorObserver(); | |
}); | |
setUpAll(() { | |
registerFallbackValue( | |
MyOverlayImage( | |
foregroundColor: Colors.red.withOpacity(.5), | |
), | |
); | |
}); | |
testWidgets('showOverlayMethod navigates to MyOverlayImage', (tester) async { | |
final myOverlay = MyOverlayImage( | |
foregroundColor: Colors.red.withOpacity(.5), | |
); | |
await mockNetworkImagesFor( | |
() => _createWidget( | |
tester: tester, | |
observer: mockObserver, | |
route: myOverlay, | |
context: mockContext, | |
child: TextButton( | |
onPressed: () => showOverlayMethod(mockContext), | |
child: const Text('Show Overlay'), | |
), | |
), | |
); | |
showOverlayMethod(mockContext); | |
final buttonFinder = find.byType(TextButton); | |
expect(buttonFinder, findsOneWidget); | |
await tester.tap(buttonFinder); | |
await tester.pumpAndSettle(); | |
verify(() => mockObserver.didPush(any(), any())).called(1); | |
expect(find.byType(MyOverlayImage), findsOneWidget); | |
}); | |
} | |
Future<void> _createWidget({ | |
required WidgetTester tester, | |
required ModalRoute<void>? route, | |
required NavigatorObserver observer, | |
required BuildContext context, | |
required Widget child, | |
}) async { | |
await tester.pumpWidget( | |
MaterialApp( | |
navigatorObservers: [observer], | |
onGenerateRoute: (settings) { | |
return route; | |
}, | |
home: Builder( | |
builder: (context) => child, | |
), | |
), | |
); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment