Merhaba arkadaşlar aşağıdaki gibi flutter kodum var. Anlaşıldığı bir vpn uygulaması. Vpn i başlatabiliyorum ama vpni kapatma yapamıyorum. Bu konuda hatamı gösterebilecek bir arkadaş varmıdır acaba.Akşam yemeğini ısmarlayabilirim.

ALDIĞIM HATA KODU;

I/flutter (27525): view model notifyListeners
E/flutter (27525): [ERROR:flutter/runtime/dart_vm_initializer.cc(41)] Unhandled Exception: MissingPluginException(No implementation found for method getConnectedDate on channel com.sail_tunnel.sail/vpn_manager)
E/flutter (27525): #0 MethodChannel._invokeMethod (package:flutter/src/services/platform_channel.dart:313:7)
E/flutter (27525): <asynchronous suspension>
E/flutter (27525): #1 VpnManager.getConnectedDate (package:sail/channels/vpn_manager.dart:44:16)
E/flutter (27525): <asynchronous suspension>
E/flutter (27525): #2 AppModel.getConnectedDate (package:sail/models/app_model.dart:70:16)
E/flutter (27525): <asynchronous suspension>
E/flutter (27525):

======== Exception caught by widgets library =======================================================
The following _CastError was thrown building ConnectionStats(dirty, dependencies: [_InheritedProviderScope<AppModel?>, _InheritedProviderScope<UserModel?>], state: ConnectionStatsState#6a56a):
Null check operator used on a null value

The relevant error-causing widget was:
ConnectionStats ConnectionStats:file:///C:/uygualamalar/sail23042023/lib/widgets/home_widget.dart:106:36
When the exception was thrown, this was the stack:
#0 ConnectionStatsState.build (package:sail/widgets/connection_stats.dart:58:50)
#1 StatefulElement.build (package:flutter/src/widgets/framework.dart:5080:27)
#2 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4968:15)
#3 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:5133:11)
#4 Element.rebuild (package:flutter/src/widgets/framework.dart:4690:5)
#5 BuildOwner.buildScope (package:flutter/src/widgets/framework.dart:2743:19)
#6 WidgetsBinding.drawFrame (package:flutter/src/widgets/binding.dart:863:21)
#7 RendererBinding._handlePersistentFrameCallback (package:flutter/src/rendering/binding.dart:381:5)
#8 SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:1289:15)
#9 SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:1218:9)
#10 SchedulerBinding._handleDrawFrame (package:flutter/src/scheduler/binding.dart:1076:5)
#11 _invoke (dart:ui/hooks.dart:145:13)
#12 PlatformDispatcher._drawFrame (dart:ui/platform_dispatcher.dart:338:5)
#13     _drawFrame (dart:ui/hooks.dart:112:31)


KOD
import 'package:flutter/material.dart';
import 'package:fluttertoast/fluttertoast.dart';
import 'package:sail/adapters/leaf_ffi/config.dart';
import 'package:sail/channels/vpn_manager.dart';
import 'package:sail/constant/app_colors.dart';
import 'package:sail/constant/app_strings.dart';
import 'package:sail/models/base_model.dart';
import 'package:sail/models/server_model.dart';
import 'package:sail/models/user_model.dart';
import 'package:sail/utils/common_util.dart';

class AppModel extends BaseModel {
VpnManager vpnManager = VpnManager();
VpnStatus vpnStatus = VpnStatus.disconnected;
bool isOn = false;
DateTime? connectedDate;
PageController pageController = PageController(initialPage: 0);
String appTitle = AppStrings.appName;
Config config = Config();
ThemeData themeData = ThemeData(
primarySwatch: AppColors.themeColor,
visualDensity: VisualDensity.adaptivePlatformDensity,
);

AppModel() {
General general = General(
loglevel: 'info',
logoutput: '{{leafLogFile}}',
dnsServer: ['223.5.5.5', '114.114.114.114'],
tunFd: '{{tunFd}}',
routingDomainResolve: true);

List<Rule> rules = [];
// rules.add(Rule(typeField: 'EXTERNAL', target: 'Direct', filter: 'site:cn'));
rules.add(Rule(typeField: 'FINAL', target: 'Direct'));

config.general = general;
config.rules = rules;
}

final Map _tabMap = {
0: AppStrings.appName,
1: '套餐',
2: '节点',
3: '我的',
};

void jumpToPage(int page) {
pageController.jumpToPage(page);
appTitle = _tabMap[page];

notifyListeners();
}

void getStatus() async {
vpnStatus = await vpnManager.getStatus();

if (vpnStatus == VpnStatus.connected) {
isOn = true;

getConnectedDate();
notifyListeners();
} else if (vpnStatus == VpnStatus.disconnected) {
isOn = false;
notifyListeners();
}
}

void getConnectedDate() async {
var date = await vpnManager.getConnectedDate();

print("date: $date");

connectedDate = date;
}

void togglePowerButton() async {
if (vpnStatus == VpnStatus.connecting) {
Fluttertoast.showToast(
msg: "Bağlanıyor, lütfen bekleyin...",
toastLength: Toast.LENGTH_SHORT,
gravity: ToastGravity.CENTER,
timeInSecForIosWeb: 2,
textColor: Colors.white,
fontSize: 14.0);
return;
}

if (vpnStatus == VpnStatus.disconnecting) {
Fluttertoast.showToast(
msg: "Bağlantı kesiliyor, lütfen bekleyin...",
toastLength: Toast.LENGTH_SHORT,
gravity: ToastGravity.CENTER,
timeInSecForIosWeb: 2,
textColor: Colors.white,
fontSize: 14.0);
return;
}

if (vpnStatus == VpnStatus.connected) {
vpnStatus = VpnStatus.disconnecting;
}

if (vpnStatus == VpnStatus.disconnected) {
vpnStatus = VpnStatus.connecting;
}

await vpnManager.toggle();

notifyListeners();
}

void getTunnelLog() async {
var log = await vpnManager.getTunnelLog();

print("log: $log");
}

void getTunnelConfiguration() async {
var conf = await vpnManager.getTunnelConfiguration();

print("config: $conf");
}

void setConfigProxies(UserModel userModel, ServerModel serverModel) async {
List<Proxy> proxies = [];
List<ProxyGroup> proxyGroups = [];
List<String> actors = [];

for (var server in serverModel.serverEntityList) {
Proxy proxy = Proxy(
tag: server.name,
protocol: server.type,
address: server.host,
port: server.port,
encryptMethod: server.cipher,
password: userModel.userEntity!.uuid);
proxies.add(proxy);
actors.add(server.name);
}

if (actors.isNotEmpty) {
proxyGroups.add(ProxyGroup(
tag: "UrlTest",
protocol: 'url-test',
actors: actors,
checkInterval: 600));

config.rules?.last.target = "UrlTest";
}

config.proxies = proxies;
config.proxyGroups = proxyGroups;

print("-----------------config-----------------");
print(config);
print("-----------------config-----------------");

vpnManager.setTunnelConfiguration(config.toString());
}

void setConfigRule(String tag) async {
// var proxy = config.proxies?.where((proxies) => proxies.tag == tag);
//
// if (proxy == null || proxy.isEmpty) {
// return;
// }
//
// config.rules?.last.target = tag;
//
// print("-----------------config-----------------");
// print(config);
// print("-----------------config-----------------");
//
// vpnManager.setTunnelConfiguration(config.toString());
}
}