import 'package:flutter/material.dart'; import 'package:hiddify/core/core_providers.dart'; import 'package:hiddify/core/prefs/prefs.dart'; import 'package:hiddify/domain/clash/clash.dart'; import 'package:hiddify/features/settings/widgets/widgets.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:recase/recase.dart'; class ClashOverridesPage extends HookConsumerWidget { const ClashOverridesPage({super.key}); @override Widget build(BuildContext context, WidgetRef ref) { final t = ref.watch(translationsProvider); final overrides = ref.watch(prefsControllerProvider.select((value) => value.clash)); final notifier = ref.watch(prefsControllerProvider.notifier); return Scaffold( body: CustomScrollView( slivers: [ SliverAppBar( title: Text(t.settings.clash.sectionTitle.titleCase), pinned: true, ), SliverList.list( children: [ InputOverrideTile( title: t.settings.clash.overrides.httpPort, value: overrides.httpPort, resetValue: ClashConfig.initial.httpPort, onChange: (value) => notifier.patchClashOverrides( ClashConfigPatch(httpPort: value), ), ), InputOverrideTile( title: t.settings.clash.overrides.socksPort, value: overrides.socksPort, resetValue: ClashConfig.initial.socksPort, onChange: (value) => notifier.patchClashOverrides( ClashConfigPatch(socksPort: value), ), ), InputOverrideTile( title: t.settings.clash.overrides.redirPort, value: overrides.redirPort, onChange: (value) => notifier.patchClashOverrides( ClashConfigPatch(redirPort: value), ), ), InputOverrideTile( title: t.settings.clash.overrides.tproxyPort, value: overrides.tproxyPort, onChange: (value) => notifier.patchClashOverrides( ClashConfigPatch(tproxyPort: value), ), ), InputOverrideTile( title: t.settings.clash.overrides.mixedPort, value: overrides.mixedPort, resetValue: ClashConfig.initial.mixedPort, onChange: (value) => notifier.patchClashOverrides( ClashConfigPatch(mixedPort: value), ), ), ToggleOverrideTile( title: t.settings.clash.overrides.allowLan, value: overrides.allowLan, onChange: (value) => notifier.patchClashOverrides( ClashConfigPatch(allowLan: value), ), ), ToggleOverrideTile( title: t.settings.clash.overrides.ipv6, value: overrides.ipv6, onChange: (value) => notifier.patchClashOverrides( ClashConfigPatch(ipv6: value), ), ), ChoiceOverrideTile( title: t.settings.clash.overrides.mode, value: overrides.mode, options: TunnelMode.values, onChange: (value) => notifier.patchClashOverrides( ClashConfigPatch(mode: value), ), ), ChoiceOverrideTile( title: t.settings.clash.overrides.logLevel, value: overrides.logLevel, options: LogLevel.values, onChange: (value) => notifier.patchClashOverrides( ClashConfigPatch(logLevel: value), ), ), ], ), ], ), ); } }