Files
plezy/tvos/Runner/Plugins/connectivity_plus/ConnectivityPlusPlugin.swift
T
2026-04-24 14:11:24 +02:00

93 lines
2.7 KiB
Swift

// Copyright 2019 The Chromium Authors. All rights reserved.
// Use of this source is governed by a BSD-style license that can
// be found in the LICENSE file.
import Flutter
public class ConnectivityPlusPlugin: NSObject, FlutterPlugin, FlutterStreamHandler {
private let connectivityProvider: ConnectivityProvider
private var eventSink: FlutterEventSink?
init(connectivityProvider: ConnectivityProvider) {
self.connectivityProvider = connectivityProvider
super.init()
self.connectivityProvider.connectivityUpdateHandler = connectivityUpdateHandler
}
public static func register(with registrar: FlutterPluginRegistrar) {
let binaryMessenger = registrar.messenger()
let channel = FlutterMethodChannel(
name: "dev.fluttercommunity.plus/connectivity",
binaryMessenger: binaryMessenger)
let streamChannel = FlutterEventChannel(
name: "dev.fluttercommunity.plus/connectivity_status",
binaryMessenger: binaryMessenger)
let connectivityProvider = PathMonitorConnectivityProvider()
let instance = ConnectivityPlusPlugin(connectivityProvider: connectivityProvider)
streamChannel.setStreamHandler(instance)
registrar.addMethodCallDelegate(instance, channel: channel)
}
public func detachFromEngine(for registrar: FlutterPluginRegistrar) {
eventSink = nil
connectivityProvider.stop()
}
public func handle(_ call: FlutterMethodCall, result: @escaping FlutterResult) {
switch call.method {
case "check":
result(statusFrom(connectivityTypes: connectivityProvider.currentConnectivityTypes))
default:
result(FlutterMethodNotImplemented)
}
}
private func statusFrom(connectivityType: ConnectivityType) -> String {
switch connectivityType {
case .wifi:
return "wifi"
case .cellular:
return "mobile"
case .wiredEthernet:
return "ethernet"
case .other:
return "other"
case .none:
return "none"
}
}
private func statusFrom(connectivityTypes: [ConnectivityType]) -> [String] {
return connectivityTypes.map {
self.statusFrom(connectivityType: $0)
}
}
public func onListen(
withArguments _: Any?,
eventSink events: @escaping FlutterEventSink
) -> FlutterError? {
eventSink = events
connectivityProvider.start()
// Update this to handle a list
connectivityUpdateHandler(connectivityTypes: connectivityProvider.currentConnectivityTypes)
return nil
}
private func connectivityUpdateHandler(connectivityTypes: [ConnectivityType]) {
DispatchQueue.main.async {
self.eventSink?(self.statusFrom(connectivityTypes: connectivityTypes))
}
}
public func onCancel(withArguments _: Any?) -> FlutterError? {
connectivityProvider.stop()
eventSink = nil
return nil
}
}