Files
FlClash/lib/common/http.dart
T
chen08209 db6f5d9036 refactor: rebuild core, providers, and application interface
Changelog: Rebuilt the core, provider, and application layers
Changelog-Type: feat
2026-08-28 10:07:17 +08:00

39 lines
1.2 KiB
Dart

import 'dart:io';
import 'package:fl_clash/common/common.dart';
import 'package:fl_clash/providers/config.dart';
import 'package:fl_clash/providers/state.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
class FlClashHttpOverrides extends HttpOverrides {
final ProviderContainer _container;
FlClashHttpOverrides(this._container);
static String findProxyFor(ProviderContainer container, Uri url) {
return findProxyForReader(container.read, url);
}
static String findProxyForReader(ProviderReader read, Uri url) {
if ([localhost].contains(url.host)) {
return 'DIRECT';
}
final isStart = read(isStartProvider);
final suspend = read(suspendProvider);
commonPrint.log('find $url proxy: $isStart');
if (!isStart || suspend) return 'DIRECT';
final mixedPort = read(
patchClashConfigProvider.select((state) => state.mixedPort),
);
return 'PROXY localhost:$mixedPort';
}
@override
HttpClient createHttpClient(SecurityContext? context) {
final client = super.createHttpClient(context);
client.badCertificateCallback = (_, _, _) => true;
client.findProxy = (url) => findProxyFor(_container, url);
return client;
}
}