Skip to content

Commit dd82b99

Browse files
committed
WIP
1 parent 4f4466b commit dd82b99

File tree

75 files changed

+6878
-368
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

75 files changed

+6878
-368
lines changed

.run/deps.run.xml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
<component name="ProjectRunConfigurationManager">
2+
<configuration default="false" name="deps" type="DartCommandLineRunConfigurationType" factoryName="Dart Command Line Application">
3+
<option name="filePath" value="$PROJECT_DIR$/lib/utils/pubinfo/dependencies.dart" />
4+
<method v="2" />
5+
</configuration>
6+
</component>

.run/dev.run.xml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
<component name="ProjectRunConfigurationManager">
2+
<configuration default="false" name="dev" type="FlutterRunConfigurationType" factoryName="Flutter">
3+
<option name="additionalArgs" value="--flavor dev -t lib/main_dev.dart" />
4+
<option name="filePath" value="$PROJECT_DIR$/lib/main.dart" />
5+
<method v="2" />
6+
</configuration>
7+
</component>

Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,4 +52,4 @@ force_upgrade:
5252
flutter update-packages --force-upgrade
5353

5454
integration_test:
55-
flutter test integration_test/app_test.dart --flavor dev
55+
flutter test integration_test/app_test.dart --flavor dev

integration_test/app_test.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ void main() {
1414
app.main([]);
1515
await tester.pumpAndSettle();
1616

17-
expect(find.text('Launches'), findsOneWidget);
17+
// expect(find.text('Launches'), findsOneWidget);
1818
expect(find.text('Emails'), findsOneWidget);
1919
expect(find.text('Settings'), findsOneWidget);
2020

Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
import 'package:flutter/material.dart';
2+
import 'package:flutter_bloc_app_template/main.dart' as app;
3+
import 'package:flutter_test/flutter_test.dart';
4+
import 'package:integration_test/integration_test.dart';
5+
6+
void main() {
7+
IntegrationTestWidgetsFlutterBinding.ensureInitialized();
8+
9+
setUp(() {});
10+
11+
testWidgets('settings test', (
12+
WidgetTester tester,
13+
) async {
14+
app.main([]);
15+
await tester.pumpAndSettle();
16+
17+
expect(find.byKey(const Key('settings')), findsOneWidget);
18+
19+
await tester.tap(find.byTooltip('Settings'));
20+
21+
await tester.pumpAndSettle();
22+
23+
expect(find.textContaining('Appearance'), findsAtLeast(1));
24+
25+
await tester.tap(find.byKey(const Key('appearance')));
26+
await tester.pumpAndSettle();
27+
expect(find.text('Appearance'), findsOneWidget);
28+
expect(find.text('Theme mode'), findsOneWidget);
29+
30+
await tester.tap(find.byKey(const Key('theme_mode_preference_switch')));
31+
await tester.pumpAndSettle();
32+
33+
expect(find.text('Dark'), findsOneWidget);
34+
expect(find.text('Light'), findsOneWidget);
35+
expect(find.text('System default'), findsOneWidget);
36+
37+
await tester.tap(find.byKey(const Key('Dark')));
38+
await tester.pumpAndSettle();
39+
40+
final darkBackgroundFinder = find.byWidgetPredicate(
41+
(widget) {
42+
return widget.key == const Key('ThemeMode.dark');
43+
},
44+
);
45+
expect(darkBackgroundFinder, findsWidgets);
46+
47+
await tester.tap(find.byKey(const Key('Light')));
48+
await tester.pumpAndSettle();
49+
50+
final lightBackgroundFinder = find.byWidgetPredicate(
51+
(widget) {
52+
return widget.key == const Key('ThemeMode.light');
53+
},
54+
);
55+
expect(lightBackgroundFinder, findsWidgets);
56+
57+
await tester.tap(find.byKey(const Key('System default')));
58+
await tester.pumpAndSettle();
59+
60+
final defaultBackgroundFinder = find.byWidgetPredicate(
61+
(widget) {
62+
return widget.key == const Key('ThemeMode.system');
63+
},
64+
);
65+
expect(defaultBackgroundFinder, findsWidgets);
66+
67+
await tester.tap(find.byTooltip('Back'));
68+
await tester.pumpAndSettle();
69+
70+
final switchFinder = find.byKey(const Key('theme_mode_switch'));
71+
expect(switchFinder, findsOneWidget);
72+
73+
await tester.tap(switchFinder);
74+
await tester.pumpAndSettle();
75+
76+
expect(darkBackgroundFinder, findsWidgets);
77+
});
78+
}

integration_test/failing_test_example.dart

Lines changed: 0 additions & 10 deletions
This file was deleted.
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
import 'package:flutter/material.dart';
2+
import 'package:flutter_bloc_app_template/main.dart' as app;
3+
import 'package:flutter_test/flutter_test.dart';
4+
import 'package:integration_test/integration_test.dart';
5+
6+
void main() {
7+
IntegrationTestWidgetsFlutterBinding.ensureInitialized();
8+
9+
setUp(() {});
10+
11+
testWidgets('settings test', (
12+
WidgetTester tester,
13+
) async {
14+
app.main([]);
15+
await tester.pumpAndSettle();
16+
17+
expect(find.byKey(const Key('settings')), findsOneWidget);
18+
19+
await tester.tap(find.byTooltip('Settings'));
20+
21+
await tester.pumpAndSettle();
22+
23+
expect(find.textContaining('Appearance'), findsAtLeast(1));
24+
expect(find.textContaining('About'), findsAtLeast(1));
25+
});
26+
}

ios/Runner.xcodeproj/xcshareddata/xcschemes/dev.xcscheme

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,13 +40,15 @@
4040
buildConfiguration = "Debug"
4141
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
4242
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
43+
customLLDBInitFile = "$(SRCROOT)/Flutter/ephemeral/flutter_lldbinit"
4344
shouldUseLaunchSchemeArgsEnv = "YES"
4445
shouldAutocreateTestPlan = "YES">
4546
</TestAction>
4647
<LaunchAction
4748
buildConfiguration = "Debug-dev"
4849
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
4950
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
51+
customLLDBInitFile = "$(SRCROOT)/Flutter/ephemeral/flutter_lldbinit"
5052
launchStyle = "0"
5153
useCustomWorkingDirectory = "NO"
5254
ignoresPersistentStateOnLaunch = "NO"

lib/app/app.dart

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ import 'package:flutter_bloc_app_template/app/localization.dart';
55
import 'package:flutter_bloc_app_template/bloc/init/init_bloc.dart';
66
import 'package:flutter_bloc_app_template/di/di_container.dart';
77
import 'package:flutter_bloc_app_template/features/launches/bloc/launches_bloc.dart';
8-
import 'package:flutter_bloc_app_template/generated/l10n.dart';
98
import 'package:flutter_bloc_app_template/index.dart';
109
import 'package:flutter_bloc_app_template/repository/launches_repository.dart';
1110
import 'package:flutter_bloc_app_template/repository/theme_repository.dart';
@@ -66,11 +65,11 @@ class MyApp extends StatelessWidget {
6665
return MaterialApp(
6766
debugShowCheckedModeBanner: kDebugMode,
6867
restorationScopeId: 'app',
68+
key: Key('${context.watch<ThemeCubit>().themeMode}'),
6969
localizationsDelegates: appLocalizationsDelegates,
7070
supportedLocales: appSupportedLocales,
71-
onGenerateTitle: (BuildContext context) =>
72-
S.of(context).appTitle,
73-
theme: context.watch<ThemeCubit>().getDefaultTheme(theme),
71+
onGenerateTitle: (BuildContext context) => context.appTitle,
72+
theme: theme.yellowLight(),
7473
darkTheme: theme.yellowDark(),
7574
themeMode: context.watch<ThemeCubit>().themeMode,
7675
navigatorKey: appNavigatorKey,

lib/bloc/theme/app_theme.dart

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import 'package:equatable/equatable.dart';
2+
13
enum AppTheme {
24
light,
35
dark,
@@ -8,3 +10,74 @@ enum AppTheme {
810
system,
911
experimental,
1012
}
13+
14+
class DarkThemePreference extends Equatable {
15+
DarkThemePreference({
16+
this.darkThemeValue = followSystem,
17+
this.isHighContrastModeEnabled = false,
18+
});
19+
20+
static const int followSystem = 1;
21+
static const int on = 2;
22+
static const int off = 3;
23+
24+
final int darkThemeValue;
25+
final bool isHighContrastModeEnabled;
26+
27+
@override
28+
List<Object?> get props => [
29+
darkThemeValue,
30+
isHighContrastModeEnabled,
31+
];
32+
33+
DarkThemePreference copyWith({
34+
int? darkThemeValue,
35+
bool? isHighContrastModeEnabled,
36+
}) {
37+
return DarkThemePreference(
38+
darkThemeValue: darkThemeValue ?? this.darkThemeValue,
39+
isHighContrastModeEnabled:
40+
isHighContrastModeEnabled ?? this.isHighContrastModeEnabled,
41+
);
42+
}
43+
}
44+
45+
extension DarkThemePreferenceExt on DarkThemePreference {
46+
bool isDarkTheme() {
47+
return darkThemeValue == DarkThemePreference.on;
48+
}
49+
}
50+
51+
class AppThemeSettings extends Equatable {
52+
AppThemeSettings({
53+
required this.darkTheme,
54+
required this.appTheme,
55+
});
56+
57+
final DarkThemePreference darkTheme;
58+
final AppTheme appTheme;
59+
60+
@override
61+
List<Object?> get props => [
62+
darkTheme,
63+
appTheme,
64+
];
65+
66+
AppThemeSettings copyWith({
67+
DarkThemePreference? darkTheme,
68+
AppTheme? appTheme,
69+
}) {
70+
return AppThemeSettings(
71+
darkTheme: darkTheme ?? this.darkTheme,
72+
appTheme: appTheme ?? this.appTheme,
73+
);
74+
}
75+
}
76+
77+
extension AppThemeExtention on AppTheme {
78+
bool isDarkTheme() {
79+
return this == AppTheme.dark ||
80+
this != AppTheme.darkGold ||
81+
this != AppTheme.darkMint;
82+
}
83+
}

0 commit comments

Comments
 (0)