Files
MWClash/lib/providers/config.dart
chen08209 b5e5d9c632 cache
2026-02-11 16:49:02 +08:00

149 lines
3.9 KiB
Dart

import 'package:fl_clash/common/common.dart';
import 'package:fl_clash/models/models.dart';
import 'package:riverpod_annotation/riverpod_annotation.dart';
part 'generated/config.g.dart';
@riverpod
class AppSetting extends _$AppSetting with AutoDisposeNotifierMixin {
@override
AppSettingProps build() {
return AppSettingProps();
}
}
@Riverpod(keepAlive: true)
class WindowSetting extends _$WindowSetting with AutoDisposeNotifierMixin {
@override
WindowProps build() {
return WindowProps();
}
void hello() {}
}
@riverpod
class VpnSetting extends _$VpnSetting with AutoDisposeNotifierMixin {
@override
VpnProps build() {
return VpnProps();
}
}
@riverpod
class NetworkSetting extends _$NetworkSetting with AutoDisposeNotifierMixin {
@override
NetworkProps build() {
return NetworkProps();
}
}
@riverpod
class ThemeSetting extends _$ThemeSetting with AutoDisposeNotifierMixin {
@override
ThemeProps build() {
return ThemeProps();
}
}
@riverpod
class CurrentProfileId extends _$CurrentProfileId
with AutoDisposeNotifierMixin {
@override
int? build() {
return null;
}
}
@riverpod
class DavSetting extends _$DavSetting with AutoDisposeNotifierMixin {
@override
DAVProps? build() {
return null;
}
}
@riverpod
class OverrideDns extends _$OverrideDns with AutoDisposeNotifierMixin {
@override
bool build() {
return false;
}
}
@riverpod
class HotKeyActions extends _$HotKeyActions with AutoDisposeNotifierMixin {
@override
List<HotKeyAction> build() {
return [];
}
}
@riverpod
class ProxiesStyleSetting extends _$ProxiesStyleSetting
with AutoDisposeNotifierMixin {
@override
ProxiesStyleProps build() {
return ProxiesStyleProps();
}
}
@Riverpod(name: 'patchClashConfigProvider')
class _PatchClashConfig extends _$PatchClashConfig
with AutoDisposeNotifierMixin {
@override
PatchClashConfig build() {
return PatchClashConfig();
}
}
@Riverpod(name: 'configProvider')
Config _config(Ref ref) {
final appSettingProps = ref.watch(appSettingProvider);
final windowProps = ref.watch(windowSettingProvider);
final vpnProps = ref.watch(vpnSettingProvider);
final networkProps = ref.watch(networkSettingProvider);
final themeProps = ref.watch(themeSettingProvider);
final currentProfileId = ref.watch(currentProfileIdProvider);
final davProps = ref.watch(davSettingProvider);
final overrideDns = ref.watch(overrideDnsProvider);
final hotKeyActions = ref.watch(hotKeyActionsProvider);
final proxiesStyleProps = ref.watch(proxiesStyleSettingProvider);
final patchClashConfig = ref.watch(patchClashConfigProvider);
return Config(
appSettingProps: appSettingProps,
windowProps: windowProps,
vpnProps: vpnProps,
networkProps: networkProps,
themeProps: themeProps,
currentProfileId: currentProfileId,
davProps: davProps,
overrideDns: overrideDns,
hotKeyActions: hotKeyActions,
proxiesStyleProps: proxiesStyleProps,
patchClashConfig: patchClashConfig,
);
}
List<Override> buildConfigOverrides(Config config) {
return [
appSettingProvider.overrideWithBuild((_, _) => config.appSettingProps),
windowSettingProvider.overrideWithBuild((_, _) => config.windowProps),
vpnSettingProvider.overrideWithBuild((_, _) => config.vpnProps),
networkSettingProvider.overrideWithBuild((_, _) => config.networkProps),
themeSettingProvider.overrideWithBuild((_, _) => config.themeProps),
currentProfileIdProvider.overrideWithBuild(
(_, _) => config.currentProfileId,
),
davSettingProvider.overrideWithBuild((_, _) => config.davProps),
overrideDnsProvider.overrideWithBuild((_, _) => config.overrideDns),
hotKeyActionsProvider.overrideWithBuild((_, _) => config.hotKeyActions),
proxiesStyleSettingProvider.overrideWithBuild(
(_, _) => config.proxiesStyleProps,
),
patchClashConfigProvider.overrideWithBuild(
(_, _) => config.patchClashConfig,
),
];
}