keyboard_height_plugin/ios/Classes/KeyboardHeightPlugin.swift

48 lines
1.8 KiB
Swift
Raw Normal View History

2023-04-28 19:21:41 +00:00
import Flutter
import UIKit
public class KeyboardHeightPlugin: NSObject, FlutterPlugin, FlutterStreamHandler {
private var eventSink: FlutterEventSink?
private var eventChannel: FlutterEventChannel?
public static func register(with registrar: FlutterPluginRegistrar) {
let instance = KeyboardHeightPlugin()
instance.eventChannel = FlutterEventChannel(name: "keyboardHeightEventChannel", binaryMessenger: registrar.messenger())
instance.eventChannel?.setStreamHandler(instance)
}
public func onListen(withArguments arguments: Any?, eventSink events: @escaping FlutterEventSink) -> FlutterError? {
eventSink = events
registerKeyboardObservers()
return nil
}
public func onCancel(withArguments arguments: Any?) -> FlutterError? {
eventSink = nil
unregisterKeyboardObservers()
return nil
}
private func registerKeyboardObservers() {
NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillShow(notification:)), name: UIResponder.keyboardWillShowNotification, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillHide(notification:)), name: UIResponder.keyboardWillHideNotification, object: nil)
}
private func unregisterKeyboardObservers() {
NotificationCenter.default.removeObserver(self, name: UIResponder.keyboardWillShowNotification, object: nil)
NotificationCenter.default.removeObserver(self, name: UIResponder.keyboardWillHideNotification, object: nil)
}
@objc private func keyboardWillShow(notification: NSNotification) {
if let userInfo = notification.userInfo,
let keyboardFrame = userInfo[UIResponder.keyboardFrameEndUserInfoKey] as? CGRect {
eventSink?(NSNumber(value: keyboardFrame.height))
}
}
@objc private func keyboardWillHide(notification: NSNotification) {
eventSink?(NSNumber(value: 0.0))
}
}