@@ -5,12 +5,14 @@ import 'package:hiddify/core/localization/locale_extensions.dart';
55import 'package:hiddify/core/localization/locale_preferences.dart' ;
66import 'package:hiddify/core/localization/translations.dart' ;
77import 'package:hiddify/core/model/region.dart' ;
8+ import 'package:hiddify/core/preferences/actions_at_closing.dart' ;
89import 'package:hiddify/core/preferences/general_preferences.dart' ;
10+ import 'package:hiddify/core/theme/app_theme_mode.dart' ;
11+ import 'package:hiddify/core/theme/theme_preferences.dart' ;
912import 'package:hiddify/features/config_option/data/config_option_repository.dart' ;
10- import 'package:hiddify/features/config_option/notifier/config_option_notifier.dart' ;
1113import 'package:hooks_riverpod/hooks_riverpod.dart' ;
1214
13- class LocalePrefTile extends HookConsumerWidget {
15+ class LocalePrefTile extends ConsumerWidget {
1416 const LocalePrefTile ({super .key});
1517
1618 @override
@@ -50,7 +52,7 @@ class LocalePrefTile extends HookConsumerWidget {
5052 }
5153}
5254
53- class RegionPrefTile extends HookConsumerWidget {
55+ class RegionPrefTile extends ConsumerWidget {
5456 const RegionPrefTile ({super .key});
5557
5658 @override
@@ -102,7 +104,7 @@ class RegionPrefTile extends HookConsumerWidget {
102104 }
103105}
104106
105- class EnableAnalyticsPrefTile extends HookConsumerWidget {
107+ class EnableAnalyticsPrefTile extends ConsumerWidget {
106108 const EnableAnalyticsPrefTile ({
107109 super .key,
108110 this .onChanged,
@@ -137,3 +139,83 @@ class EnableAnalyticsPrefTile extends HookConsumerWidget {
137139 );
138140 }
139141}
142+
143+ class ThemeModePrefTile extends ConsumerWidget {
144+ const ThemeModePrefTile ({super .key});
145+
146+ @override
147+ Widget build (BuildContext context, WidgetRef ref) {
148+ final t = ref.watch (translationsProvider);
149+
150+ final themeMode = ref.watch (themePreferencesProvider);
151+
152+ return ListTile (
153+ title: Text (t.settings.general.themeMode),
154+ subtitle: Text (themeMode.present (t)),
155+ leading: const Icon (FluentIcons .weather_moon_20_regular),
156+ onTap: () async {
157+ final selectedThemeMode = await showDialog <AppThemeMode >(
158+ context: context,
159+ builder: (context) {
160+ return SimpleDialog (
161+ title: Text (t.settings.general.themeMode),
162+ children: AppThemeMode .values
163+ .map (
164+ (e) => RadioListTile (
165+ title: Text (e.present (t)),
166+ value: e,
167+ groupValue: themeMode,
168+ onChanged: Navigator .of (context).maybePop,
169+ ),
170+ )
171+ .toList (),
172+ );
173+ },
174+ );
175+ if (selectedThemeMode != null ) {
176+ await ref.read (themePreferencesProvider.notifier).changeThemeMode (selectedThemeMode);
177+ }
178+ },
179+ );
180+ }
181+ }
182+
183+ class ClosingPrefTile extends ConsumerWidget {
184+ const ClosingPrefTile ({super .key});
185+
186+ @override
187+ Widget build (BuildContext context, WidgetRef ref) {
188+ final t = ref.watch (translationsProvider);
189+
190+ final action = ref.watch (Preferences .actionAtClose);
191+
192+ return ListTile (
193+ title: Text (t.settings.general.actionAtClosing),
194+ subtitle: Text (action.present (t)),
195+ leading: const Icon (FluentIcons .arrow_exit_20_regular),
196+ onTap: () async {
197+ final selectedAction = await showDialog <ActionsAtClosing >(
198+ context: context,
199+ builder: (context) {
200+ return SimpleDialog (
201+ title: Text (t.settings.general.actionAtClosing),
202+ children: ActionsAtClosing .values
203+ .map (
204+ (e) => RadioListTile (
205+ title: Text (e.present (t)),
206+ value: e,
207+ groupValue: action,
208+ onChanged: Navigator .of (context).maybePop,
209+ ),
210+ )
211+ .toList (),
212+ );
213+ },
214+ );
215+ if (selectedAction != null ) {
216+ await ref.read (Preferences .actionAtClose.notifier).update (selectedAction);
217+ }
218+ },
219+ );
220+ }
221+ }
0 commit comments