Merge branch 'main' of hiddify-github:hiddify/hiddify-next
This commit is contained in:
@@ -52,13 +52,13 @@ class ConfigOptionsPage extends HookConsumerWidget {
|
||||
),
|
||||
ListTile(
|
||||
title: Text(t.settings.config.logLevel),
|
||||
subtitle: Text(options.logLevel.name),
|
||||
subtitle: Text(options.logLevel.name.toUpperCase()),
|
||||
onTap: () async {
|
||||
final logLevel = await SettingsPickerDialog(
|
||||
title: t.settings.config.logLevel,
|
||||
selected: options.logLevel,
|
||||
options: LogLevel.values,
|
||||
getTitle: (e) => e.name,
|
||||
options: LogLevel.choices,
|
||||
getTitle: (e) => e.name.toUpperCase(),
|
||||
resetValue: _default.logLevel,
|
||||
).show(context);
|
||||
if (logLevel == null) return;
|
||||
|
||||
@@ -6,6 +6,7 @@ import 'package:hiddify/core/core_providers.dart';
|
||||
import 'package:hiddify/core/prefs/prefs.dart';
|
||||
import 'package:hiddify/core/router/routes/routes.dart';
|
||||
import 'package:hiddify/domain/singbox/singbox.dart';
|
||||
import 'package:hiddify/features/common/common.dart';
|
||||
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
||||
|
||||
class AdvancedSettingTiles extends HookConsumerWidget {
|
||||
@@ -20,6 +21,7 @@ class AdvancedSettingTiles extends HookConsumerWidget {
|
||||
|
||||
return Column(
|
||||
children: [
|
||||
const RegionPrefTile(),
|
||||
ListTile(
|
||||
title: Text(t.settings.config.pageTitle),
|
||||
leading: const Icon(Icons.edit_document),
|
||||
|
||||
@@ -3,7 +3,6 @@ import 'package:go_router/go_router.dart';
|
||||
import 'package:hiddify/core/core_providers.dart';
|
||||
import 'package:hiddify/core/prefs/prefs.dart';
|
||||
import 'package:hiddify/features/common/common.dart';
|
||||
import 'package:hiddify/features/settings/widgets/theme_mode_switch_button.dart';
|
||||
import 'package:hiddify/services/auto_start_service.dart';
|
||||
import 'package:hiddify/utils/utils.dart';
|
||||
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
||||
@@ -44,31 +43,34 @@ class GeneralSettingTiles extends HookConsumerWidget {
|
||||
),
|
||||
ListTile(
|
||||
title: Text(t.settings.general.themeMode),
|
||||
subtitle: Text(
|
||||
switch (theme.mode) {
|
||||
ThemeMode.system => t.settings.general.themeModes.system,
|
||||
ThemeMode.light => t.settings.general.themeModes.light,
|
||||
ThemeMode.dark => t.settings.general.themeModes.dark,
|
||||
},
|
||||
),
|
||||
trailing: ThemeModeSwitch(
|
||||
themeMode: theme.mode,
|
||||
onChanged: ref.read(themeModeNotifierProvider.notifier).update,
|
||||
),
|
||||
subtitle: Text(theme.mode.present(t)),
|
||||
leading: const Icon(Icons.light_mode),
|
||||
onTap: () async {
|
||||
await ref.read(themeModeNotifierProvider.notifier).update(
|
||||
Theme.of(context).brightness == Brightness.light
|
||||
? ThemeMode.dark
|
||||
: ThemeMode.light,
|
||||
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: theme.mode,
|
||||
onChanged: (e) => context.pop(e),
|
||||
),
|
||||
)
|
||||
.toList(),
|
||||
);
|
||||
},
|
||||
);
|
||||
if (selectedThemeMode != null) {
|
||||
await ref
|
||||
.read(themeModeNotifierProvider.notifier)
|
||||
.update(selectedThemeMode);
|
||||
}
|
||||
},
|
||||
),
|
||||
SwitchListTile(
|
||||
title: Text(t.settings.general.trueBlack),
|
||||
value: theme.trueBlack,
|
||||
onChanged: ref.read(trueBlackThemeNotifierProvider.notifier).update,
|
||||
),
|
||||
if (PlatformUtils.isDesktop) ...[
|
||||
SwitchListTile(
|
||||
title: Text(t.settings.general.autoStart),
|
||||
|
||||
@@ -1,51 +0,0 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:hiddify/core/core_providers.dart';
|
||||
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
||||
|
||||
class ThemeModeSwitch extends HookConsumerWidget {
|
||||
const ThemeModeSwitch({
|
||||
super.key,
|
||||
required this.themeMode,
|
||||
required this.onChanged,
|
||||
});
|
||||
final ThemeMode themeMode;
|
||||
final ValueChanged<ThemeMode> onChanged;
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context, WidgetRef ref) {
|
||||
final t = ref.watch(translationsProvider);
|
||||
|
||||
final List<bool> isSelected = <bool>[
|
||||
themeMode == ThemeMode.light,
|
||||
themeMode == ThemeMode.system,
|
||||
themeMode == ThemeMode.dark,
|
||||
];
|
||||
|
||||
return ToggleButtons(
|
||||
isSelected: isSelected,
|
||||
onPressed: (int newIndex) {
|
||||
if (newIndex == 0) {
|
||||
onChanged(ThemeMode.light);
|
||||
} else if (newIndex == 1) {
|
||||
onChanged(ThemeMode.system);
|
||||
} else {
|
||||
onChanged(ThemeMode.dark);
|
||||
}
|
||||
},
|
||||
children: <Widget>[
|
||||
Icon(
|
||||
Icons.wb_sunny,
|
||||
semanticLabel: t.settings.general.themeModes.light,
|
||||
),
|
||||
Icon(
|
||||
Icons.phone_iphone,
|
||||
semanticLabel: t.settings.general.themeModes.system,
|
||||
),
|
||||
Icon(
|
||||
Icons.bedtime,
|
||||
semanticLabel: t.settings.general.themeModes.dark,
|
||||
),
|
||||
],
|
||||
);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user