42 lines
1.7 KiB
Swift
42 lines
1.7 KiB
Swift
import Flutter
|
|
import UIKit
|
|
import GoogleCast
|
|
|
|
public class SwiftFlutterCastFrameworkPlugin: NSObject, FlutterPlugin {
|
|
public static func register(with registrar: FlutterPluginRegistrar) {
|
|
let channel = FlutterMethodChannel(name: "flutter_cast_framework", binaryMessenger: registrar.messenger())
|
|
let instance = SwiftFlutterCastFrameworkPlugin(channel: channel)
|
|
registrar.addMethodCallDelegate(instance, channel: channel)
|
|
}
|
|
|
|
let castContext: GCKCastContext
|
|
var stateObserver: NSKeyValueObservation?
|
|
var channel: FlutterMethodChannel
|
|
|
|
init(channel: FlutterMethodChannel) {
|
|
self.channel = channel
|
|
self.castContext = GCKCastContext.sharedInstance()
|
|
self.stateObserver = GCKCastContext.sharedInstance().observe(\.castState, options: [.new, .old, .initial]){ (state, change) in
|
|
let castStateRaw = GCKCastContext.sharedInstance().castState.rawValue
|
|
// Android CastStates are 1-to-4, while iOS CastStates are 0-to-3. I align iOS to Android by adding 1
|
|
let castStateRawAdjusted = castStateRaw + 1
|
|
print("cast state change to: \(castStateRawAdjusted)")
|
|
channel.invokeMethod(MethodNames.onCastStateChanged.rawValue, arguments: castStateRawAdjusted)
|
|
}
|
|
super.init()
|
|
}
|
|
|
|
public func handle(_ call: FlutterMethodCall, result: @escaping FlutterResult) {
|
|
switch call.method {
|
|
case MethodNames.showCastDialog.rawValue:
|
|
castContext.presentCastDialog()
|
|
default:
|
|
print("Method [\(call.method)] is not implemented.")
|
|
}
|
|
}
|
|
|
|
deinit {
|
|
stateObserver?.invalidate()
|
|
stateObserver = nil
|
|
}
|
|
}
|