// vpn_bridge_provider.dart — VpnBridge 平台分派 // // macOS / Linux / Windows → DesktopVpnBridge(真实子进程) // Android / iOS → VpnNativeBridge(内嵌 libbox,走 pangolin/vpn 通道) // 其他平台(Web / 测试)→ VpnBridgeMock import 'package:flutter/foundation.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'desktop_vpn_bridge.dart'; import 'vpn_bridge.dart'; import 'vpn_bridge_mock.dart'; // 通过 dart:io Platform 按平台选择实现。 // Web 平台须先检查 kIsWeb(dart:io 在 Web 上不可用)。 import 'dart:io' show Platform; /// P1 方案B 开关:macOS 是否走原生 System Extension(VpnNativeBridge)而非 PoC 的 /// sudo 子进程(DesktopVpnBridge)。默认 false——待 PacketTunnel target/签名就绪、 /// 原生侧联调通过后置 true。见 docs/p1-macos-system-extension.md。 const bool kUseNativeVpnMacOS = true; /// 全局单例 VpnBridge。Ref 生命周期内不变。 final vpnBridgeProvider = Provider((ref) { if (!kIsWeb) { if (Platform.isMacOS && kUseNativeVpnMacOS) { return VpnNativeBridge(); } if (Platform.isAndroid) { return VpnNativeBridge(); } // iOS:NEPacketTunnelProvider 内嵌 libbox(B1/C1 已打通)。走原生 MethodChannel // (pangolin/vpn → AppDelegate → VpnManager),不再用 mock。 if (Platform.isIOS) { return VpnNativeBridge(); } if (Platform.isMacOS || Platform.isLinux || Platform.isWindows) { return DesktopVpnBridge(); } } return VpnBridgeMock(); });