reset direct dns when region change

This commit is contained in:
hiddify-com
2024-07-27 23:51:54 +02:00
parent c4f8ebeaf4
commit bdb69a603a
6 changed files with 35 additions and 26 deletions

View File

@@ -106,12 +106,36 @@ class PreferencesNotifier<T, P> extends StateNotifier<T> {
static StateNotifierProvider<PreferencesNotifier<T, P>, T> create<T, P>(
String key,
T defaultValue, {
T Function(Ref ref)? defaultValueFunction,
T Function(P value)? mapFrom,
P Function(T value)? mapTo,
bool Function(T value)? validator,
T? overrideValue,
}) =>
StateNotifierProvider(
(ref) => PreferencesNotifier._(
ref: ref,
entry: PreferencesEntry<T, P>(
preferences: ref.read(sharedPreferencesProvider).requireValue,
key: key,
defaultValue: defaultValueFunction?.call(ref) ?? defaultValue,
mapFrom: mapFrom,
mapTo: mapTo,
validator: validator,
),
overrideValue: overrideValue,
),
);
static AutoDisposeStateNotifierProvider<PreferencesNotifier<T, P>, T> createAutoDispose<T, P>(
String key,
T defaultValue, {
T Function(P value)? mapFrom,
P Function(T value)? mapTo,
bool Function(T value)? validator,
T? overrideValue,
}) =>
StateNotifierProvider.autoDispose(
(ref) => PreferencesNotifier._(
ref: ref,
entry: PreferencesEntry<T, P>(
@@ -126,30 +150,6 @@ class PreferencesNotifier<T, P> extends StateNotifier<T> {
),
);
static AutoDisposeStateNotifierProvider<PreferencesNotifier<T, P>, T>
createAutoDispose<T, P>(
String key,
T defaultValue, {
T Function(P value)? mapFrom,
P Function(T value)? mapTo,
bool Function(T value)? validator,
T? overrideValue,
}) =>
StateNotifierProvider.autoDispose(
(ref) => PreferencesNotifier._(
ref: ref,
entry: PreferencesEntry<T, P>(
preferences: ref.read(sharedPreferencesProvider).requireValue,
key: key,
defaultValue: defaultValue,
mapFrom: mapFrom,
mapTo: mapTo,
validator: validator,
),
overrideValue: overrideValue,
),
);
P raw() {
final value = overrideValue ?? state;
if (entry.mapTo != null) return entry.mapTo!(value);

View File

@@ -84,8 +84,11 @@ class RegionPrefTile extends HookConsumerWidget {
);
if (selectedRegion != null) {
// await ref.read(Preferences.region.notifier).update(selectedRegion);
await ref.watch(ConfigOptions.region.notifier).update(selectedRegion);
await ref.watch(ConfigOptions.directDnsAddress.notifier).reset();
// await ref.read(configOptionNotifierProvider.notifier).build();
// await ref.watch(ConfigOptions.resolveDestination.notifier).update(!ref.watch(ConfigOptions.resolveDestination.notifier).raw());
//for reload config

View File

@@ -71,6 +71,7 @@ abstract class ConfigOptions {
static final directDnsAddress = PreferencesNotifier.create<String, String>(
"direct-dns-address",
"1.1.1.1",
defaultValueFunction: (ref) => ref.read(region) == Region.cn ? "223.5.5.5" : "1.1.1.1",
validator: (value) => value.isNotBlank,
);

View File

@@ -146,6 +146,7 @@ class ConfigOptionsPage extends HookConsumerWidget {
choices: Region.values,
title: t.settings.general.region,
presentChoice: (value) => value.present(t),
onChanged: (val) => ref.watch(ConfigOptions.directDnsAddress.notifier).reset(),
),
SwitchListTile(
title: Text(experimental(t.config.blockAds)),

View File

@@ -61,6 +61,7 @@ class ChoicePreferenceWidget<T> extends StatelessWidget {
required this.title,
required this.presentChoice,
this.validateInput,
this.onChanged,
});
final T selected;
@@ -70,7 +71,7 @@ class ChoicePreferenceWidget<T> extends StatelessWidget {
final String title;
final String Function(T value) presentChoice;
final bool Function(String value)? validateInput;
final ValueChanged<T>? onChanged;
@override
Widget build(BuildContext context) {
return ListTile(
@@ -88,7 +89,9 @@ class ChoicePreferenceWidget<T> extends StatelessWidget {
if (selection == null) {
return;
}
await preferences.update(selection);
final out = await preferences.update(selection);
onChanged?.call(selection);
return out;
},
);
}

View File

@@ -124,6 +124,7 @@ class IntroPage extends HookConsumerWidget with PresLogger {
'Timezone Region: ${regionLocale.region} Locale: ${regionLocale.locale}',
);
await ref.read(ConfigOptions.region.notifier).update(regionLocale.region);
await ref.watch(ConfigOptions.directDnsAddress.notifier).reset();
await ref.read(localePreferencesProvider.notifier).changeLocale(regionLocale.locale);
return;
} catch (e) {