flutter_cast_framework_modern/ios/Classes/SwiftFlutterCastFrameworkPlugin.swift
gianlucaparadise 9dc03055de iOS: Initial CAF setup;
CastState handling;
CastButton press handling;
2019-11-19 06:10:10 +01:00

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
}
}