| import 'package:flutter/material.dart'; |
| import 'package:flutter_test/flutter_test.dart'; |
| import 'package:{{projectName}}/src/app.dart'; |
| import 'package:{{projectName}}/src/sample_feature/sample_item_details_view.dart'; |
| import 'package:{{projectName}}/src/settings/settings_controller.dart'; |
| import 'package:{{projectName}}/src/settings/settings_service.dart'; |
| import 'package:{{projectName}}/src/settings/settings_view.dart'; |
| |
| void main() { |
| group('ListDetailApp', () { |
| testWidgets('displays a list of items', (WidgetTester tester) async { |
| final service = SettingsService(); |
| final controller = SettingsController(service); |
| |
| await controller.loadSettings(); |
| await tester.pumpWidget(MyApp(settingsController: controller)); |
| |
| expect(find.byType(ListTile), findsNWidgets(3)); |
| }); |
| |
| testWidgets('navigates to an item page', (WidgetTester tester) async { |
| final service = SettingsService(); |
| final controller = SettingsController(service); |
| |
| await controller.loadSettings(); |
| await tester.pumpWidget(MyApp(settingsController: controller)); |
| await tester.tap(find.byType(ListTile).first); |
| await tester.pumpAndSettle(); |
| |
| expect(find.byType(SampleItemDetailsView), findsOneWidget); |
| }); |
| |
| testWidgets('changes the app theme', (WidgetTester tester) async { |
| final service = SettingsService(); |
| final controller = SettingsController(service); |
| |
| // Navigate to Settings |
| await controller.loadSettings(); |
| await tester.pumpWidget(MyApp(settingsController: controller)); |
| await tester.tap(find.byType(IconButton)); |
| await tester.pumpAndSettle(); |
| |
| // Verify defaults in place |
| expect(controller.themeMode, ThemeMode.system); |
| expect(find.byType(SettingsView), findsOneWidget); |
| expect(findApp(ThemeMode.system), findsOneWidget); |
| |
| // Change to Dark Theme |
| await tester.tap(find.text('System Theme')); |
| await tester.pumpAndSettle(); |
| await tester.tap(find.text('Dark Theme').last); |
| await tester.pumpAndSettle(); |
| |
| // Verify Dark Theme rendered |
| expect(controller.themeMode, ThemeMode.dark); |
| expect(findApp(ThemeMode.dark), findsOneWidget); |
| |
| // Change to Light Theme |
| await tester.tap(find.text('Dark Theme')); |
| await tester.pumpAndSettle(); |
| await tester.tap(find.text('Light Theme').last); |
| await tester.pumpAndSettle(); |
| |
| // Verify light theme enabled |
| expect(controller.themeMode, ThemeMode.light); |
| expect(findApp(ThemeMode.light), findsOneWidget); |
| }); |
| }); |
| } |
| |
| Finder findApp(ThemeMode themeMode) => find.byWidgetPredicate( |
| (widget) => widget is MaterialApp && widget.themeMode == themeMode, |
| ); |