refactor: replace HookConsumerWidget with ConsumerWidget and add ThemeModePrefTile
This commit is contained in:
@@ -5,12 +5,12 @@ import 'package:hiddify/core/localization/locale_extensions.dart';
|
|||||||
import 'package:hiddify/core/localization/locale_preferences.dart';
|
import 'package:hiddify/core/localization/locale_preferences.dart';
|
||||||
import 'package:hiddify/core/localization/translations.dart';
|
import 'package:hiddify/core/localization/translations.dart';
|
||||||
import 'package:hiddify/core/model/region.dart';
|
import 'package:hiddify/core/model/region.dart';
|
||||||
import 'package:hiddify/core/preferences/general_preferences.dart';
|
import 'package:hiddify/core/theme/app_theme_mode.dart';
|
||||||
|
import 'package:hiddify/core/theme/theme_preferences.dart';
|
||||||
import 'package:hiddify/features/config_option/data/config_option_repository.dart';
|
import 'package:hiddify/features/config_option/data/config_option_repository.dart';
|
||||||
import 'package:hiddify/features/config_option/notifier/config_option_notifier.dart';
|
|
||||||
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
||||||
|
|
||||||
class LocalePrefTile extends HookConsumerWidget {
|
class LocalePrefTile extends ConsumerWidget {
|
||||||
const LocalePrefTile({super.key});
|
const LocalePrefTile({super.key});
|
||||||
|
|
||||||
@override
|
@override
|
||||||
@@ -50,7 +50,7 @@ class LocalePrefTile extends HookConsumerWidget {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class RegionPrefTile extends HookConsumerWidget {
|
class RegionPrefTile extends ConsumerWidget {
|
||||||
const RegionPrefTile({super.key});
|
const RegionPrefTile({super.key});
|
||||||
|
|
||||||
@override
|
@override
|
||||||
@@ -102,7 +102,7 @@ class RegionPrefTile extends HookConsumerWidget {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class EnableAnalyticsPrefTile extends HookConsumerWidget {
|
class EnableAnalyticsPrefTile extends ConsumerWidget {
|
||||||
const EnableAnalyticsPrefTile({
|
const EnableAnalyticsPrefTile({
|
||||||
super.key,
|
super.key,
|
||||||
this.onChanged,
|
this.onChanged,
|
||||||
@@ -137,3 +137,43 @@ class EnableAnalyticsPrefTile extends HookConsumerWidget {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class ThemeModePrefTile extends ConsumerWidget {
|
||||||
|
const ThemeModePrefTile({super.key});
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context, WidgetRef ref) {
|
||||||
|
final t = ref.watch(translationsProvider);
|
||||||
|
|
||||||
|
final themeMode = ref.watch(themePreferencesProvider);
|
||||||
|
|
||||||
|
return ListTile(
|
||||||
|
title: Text(t.settings.general.themeMode),
|
||||||
|
subtitle: Text(themeMode.present(t)),
|
||||||
|
leading: const Icon(FluentIcons.weather_moon_20_regular),
|
||||||
|
onTap: () async {
|
||||||
|
final selectedThemeMode = await showDialog<AppThemeMode>(
|
||||||
|
context: context,
|
||||||
|
builder: (context) {
|
||||||
|
return SimpleDialog(
|
||||||
|
title: Text(t.settings.general.themeMode),
|
||||||
|
children: AppThemeMode.values
|
||||||
|
.map(
|
||||||
|
(e) => RadioListTile(
|
||||||
|
title: Text(e.present(t)),
|
||||||
|
value: e,
|
||||||
|
groupValue: themeMode,
|
||||||
|
onChanged: Navigator.of(context).maybePop,
|
||||||
|
),
|
||||||
|
)
|
||||||
|
.toList(),
|
||||||
|
);
|
||||||
|
},
|
||||||
|
);
|
||||||
|
if (selectedThemeMode != null) {
|
||||||
|
await ref.read(themePreferencesProvider.notifier).changeThemeMode(selectedThemeMode);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -19,39 +19,10 @@ class GeneralSettingTiles extends HookConsumerWidget {
|
|||||||
Widget build(BuildContext context, WidgetRef ref) {
|
Widget build(BuildContext context, WidgetRef ref) {
|
||||||
final t = ref.watch(translationsProvider);
|
final t = ref.watch(translationsProvider);
|
||||||
|
|
||||||
final themeMode = ref.watch(themePreferencesProvider);
|
|
||||||
|
|
||||||
return Column(
|
return Column(
|
||||||
children: [
|
children: [
|
||||||
const LocalePrefTile(),
|
const LocalePrefTile(),
|
||||||
ListTile(
|
const ThemeModePrefTile(),
|
||||||
title: Text(t.settings.general.themeMode),
|
|
||||||
subtitle: Text(themeMode.present(t)),
|
|
||||||
leading: const Icon(FluentIcons.weather_moon_20_regular),
|
|
||||||
onTap: () async {
|
|
||||||
final selectedThemeMode = await showDialog<AppThemeMode>(
|
|
||||||
context: context,
|
|
||||||
builder: (context) {
|
|
||||||
return SimpleDialog(
|
|
||||||
title: Text(t.settings.general.themeMode),
|
|
||||||
children: AppThemeMode.values
|
|
||||||
.map(
|
|
||||||
(e) => RadioListTile(
|
|
||||||
title: Text(e.present(t)),
|
|
||||||
value: e,
|
|
||||||
groupValue: themeMode,
|
|
||||||
onChanged: Navigator.of(context).maybePop,
|
|
||||||
),
|
|
||||||
)
|
|
||||||
.toList(),
|
|
||||||
);
|
|
||||||
},
|
|
||||||
);
|
|
||||||
if (selectedThemeMode != null) {
|
|
||||||
await ref.read(themePreferencesProvider.notifier).changeThemeMode(selectedThemeMode);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
),
|
|
||||||
const EnableAnalyticsPrefTile(),
|
const EnableAnalyticsPrefTile(),
|
||||||
SwitchListTile(
|
SwitchListTile(
|
||||||
title: Text(t.settings.general.autoIpCheck),
|
title: Text(t.settings.general.autoIpCheck),
|
||||||
|
|||||||
Reference in New Issue
Block a user