import 'dart:async'; import 'dart:convert'; import 'dart:io'; import 'dart:isolate'; import 'package:fl_clash/state.dart'; import 'package:flutter/services.dart'; import '../clash/lib.dart'; class Service { static Service? _instance; late MethodChannel methodChannel; ReceivePort? receiver; Service._internal() { methodChannel = const MethodChannel("service"); } factory Service() { _instance ??= Service._internal(); return _instance!; } Future init() async { return await methodChannel.invokeMethod("init"); } Future destroy() async { return await methodChannel.invokeMethod("destroy"); } Future startVpn() async { final options = await clashLib?.getAndroidVpnOptions(); return await methodChannel.invokeMethod("startVpn", { 'data': json.encode(options), }); } Future stopVpn() async { return await methodChannel.invokeMethod("stopVpn"); } } Service? get service => Platform.isAndroid && !globalState.isService ? Service() : null;