mirror of
https://github.com/flutter/flutter.git
synced 2025-06-03 00:51:18 +00:00
74 lines
2.7 KiB
Cheetah
74 lines
2.7 KiB
Cheetah
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,
|
|
);
|