diff --git a/lib/models/clash_config.dart b/lib/models/clash_config.dart index f72700b..9f63160 100644 --- a/lib/models/clash_config.dart +++ b/lib/models/clash_config.dart @@ -200,6 +200,24 @@ class Tun with _$Tun { } } +extension TunExt on Tun { + Tun getRealTun(RouteMode routeMode) { + final mRouteAddress = routeMode == RouteMode.bypassPrivate + ? defaultBypassPrivateRouteAddress + : routeAddress; + return switch (system.isDesktop) { + true => copyWith( + autoRoute: true, + routeAddress: [], + ), + false => copyWith( + autoRoute: mRouteAddress.isEmpty ? true : false, + routeAddress: mRouteAddress, + ), + }; + } +} + @freezed class FallbackFilter with _$FallbackFilter { const factory FallbackFilter({ diff --git a/lib/providers/generated/state.g.dart b/lib/providers/generated/state.g.dart index 7b85e73..f38958c 100644 --- a/lib/providers/generated/state.g.dart +++ b/lib/providers/generated/state.g.dart @@ -94,7 +94,7 @@ final coreStateProvider = AutoDisposeProvider.internal( @Deprecated('Will be removed in 3.0. Use Ref instead') // ignore: unused_element typedef CoreStateRef = AutoDisposeProviderRef; -String _$updateParamsHash() => r'79fd7a5a8650fabac3a2ca7ce903c1d9eb363ed2'; +String _$updateParamsHash() => r'012df72ab0e769a51c573f4692031506d7b1f1b4'; /// See also [updateParams]. @ProviderFor(updateParams) diff --git a/lib/providers/state.dart b/lib/providers/state.dart index 6daf2c3..3188b9f 100644 --- a/lib/providers/state.dart +++ b/lib/providers/state.dart @@ -105,10 +105,15 @@ CoreState coreState(Ref ref) { @riverpod UpdateParams updateParams(Ref ref) { + final routeMode = ref.watch( + networkSettingProvider.select( + (state) => state.routeMode, + ), + ); return ref.watch( patchClashConfigProvider.select( (state) => UpdateParams( - tun: state.tun, + tun: state.tun.getRealTun(routeMode), allowLan: state.allowLan, findProcessMode: state.findProcessMode, mode: state.mode, diff --git a/lib/state.dart b/lib/state.dart index 7d00055..4e757c7 100644 --- a/lib/state.dart +++ b/lib/state.dart @@ -315,19 +315,9 @@ class GlobalState { final profileId = profile.id; final configMap = await getProfileConfig(profileId); final rawConfig = await handleEvaluate(configMap); - final routeAddress = - config.networkProps.routeMode == RouteMode.bypassPrivate - ? defaultBypassPrivateRouteAddress - : patchConfig.tun.routeAddress; - final realPatchConfig = !system.isDesktop - ? patchConfig.copyWith.tun( - autoRoute: routeAddress.isEmpty ? true : false, - routeAddress: routeAddress, - ) - : patchConfig.copyWith.tun( - autoRoute: true, - routeAddress: [], - ); + final realPatchConfig = patchConfig.copyWith( + tun: patchConfig.tun.getRealTun(config.networkProps.routeMode), + ); rawConfig["external-controller"] = realPatchConfig.externalController.value; rawConfig["external-ui"] = ""; rawConfig["interface-name"] = ""; diff --git a/pubspec.yaml b/pubspec.yaml index 76556ac..e512885 100755 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,7 +1,7 @@ name: fl_clash description: A multi-platform proxy client based on ClashMeta, simple and easy to use, open-source and ad-free. publish_to: 'none' -version: 0.8.85+202506071 +version: 0.8.86+202506121 environment: sdk: '>=3.1.0 <4.0.0'