import 'package:flutter/services.dart'; import 'package:venera/foundation/app.dart'; import 'package:venera/foundation/appdata.dart'; import 'package:venera/utils/ext.dart'; String? _cachedProxy; DateTime? _cachedProxyTime; Future getProxy() async { if (_cachedProxyTime != null && DateTime.now().difference(_cachedProxyTime!).inSeconds < 1) { return _cachedProxy; } String? proxy = await _getProxy(); _cachedProxy = proxy; _cachedProxyTime = DateTime.now(); return proxy; } Future _getProxy() async { if ((appdata.settings['proxy'] as String).removeAllBlank == "direct") { return null; } if (appdata.settings['proxy'] != "system") return appdata.settings['proxy']; String res; if (!App.isLinux) { const channel = MethodChannel("venera/method_channel"); try { res = await channel.invokeMethod("getProxy"); } catch (e) { return null; } } else { res = "No Proxy"; } if (res == "No Proxy") return null; if (res.contains(";")) { var proxies = res.split(";"); for (String proxy in proxies) { proxy = proxy.removeAllBlank; if (proxy.startsWith('https=')) { return proxy.substring(6); } } } final RegExp regex = RegExp( r'^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}:\d+$', caseSensitive: false, multiLine: false, ); if (!regex.hasMatch(res)) { return null; } return res; }