|
@@ -0,0 +1,85 @@
|
|
|
+//
|
|
|
+// KeyboardEventHandler.swift
|
|
|
+// flowy_infra_ui
|
|
|
+//
|
|
|
+// Created by Jaylen Bian on 7/17/21.
|
|
|
+//
|
|
|
+
|
|
|
+class KeyboardEventHandler: NSObject, FlutterStreamHandler {
|
|
|
+
|
|
|
+ var isKeyboardShow: Bool = false
|
|
|
+ var eventSink: FlutterEventSink?
|
|
|
+
|
|
|
+ override init() {
|
|
|
+ super.init()
|
|
|
+
|
|
|
+ NotificationCenter.default.addObserver(
|
|
|
+ self,
|
|
|
+ selector: #selector(handleKeyboardWillShow),
|
|
|
+ name: UIApplication.keyboardWillShowNotification,
|
|
|
+ object: nil)
|
|
|
+ NotificationCenter.default.addObserver(
|
|
|
+ self,
|
|
|
+ selector: #selector(handleKeyboardDidShow),
|
|
|
+ name: UIApplication.keyboardDidShowNotification,
|
|
|
+ object: nil)
|
|
|
+ NotificationCenter.default.addObserver(
|
|
|
+ self,
|
|
|
+ selector: #selector(handleKeyboardWillHide),
|
|
|
+ name: UIApplication.keyboardWillHideNotification,
|
|
|
+ object: nil)
|
|
|
+ NotificationCenter.default.addObserver(
|
|
|
+ self,
|
|
|
+ selector: #selector(handleKeyboardDidHide),
|
|
|
+ name: UIApplication.keyboardDidHideNotification,
|
|
|
+ object: nil)
|
|
|
+ }
|
|
|
+
|
|
|
+ func onListen(withArguments arguments: Any?, eventSink events: @escaping FlutterEventSink) -> FlutterError? {
|
|
|
+ eventSink = events
|
|
|
+ return nil
|
|
|
+ }
|
|
|
+
|
|
|
+ func onCancel(withArguments arguments: Any?) -> FlutterError? {
|
|
|
+ eventSink = nil
|
|
|
+ return nil
|
|
|
+ }
|
|
|
+
|
|
|
+ // MARK: Helper
|
|
|
+
|
|
|
+ @objc
|
|
|
+ private func handleKeyboardWillShow() {
|
|
|
+ guard !isKeyboardShow else {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ isKeyboardShow = true
|
|
|
+ eventSink?(NSNumber(booleanLiteral: true))
|
|
|
+ }
|
|
|
+
|
|
|
+ @objc
|
|
|
+ private func handleKeyboardDidShow() {
|
|
|
+ guard !isKeyboardShow else {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ isKeyboardShow = true
|
|
|
+ eventSink?(NSNumber(booleanLiteral: true))
|
|
|
+ }
|
|
|
+
|
|
|
+ @objc
|
|
|
+ private func handleKeyboardWillHide() {
|
|
|
+ guard isKeyboardShow else {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ isKeyboardShow = false
|
|
|
+ eventSink?(NSNumber(booleanLiteral: false))
|
|
|
+ }
|
|
|
+
|
|
|
+ @objc
|
|
|
+ private func handleKeyboardDidHide() {
|
|
|
+ guard isKeyboardShow else {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ isKeyboardShow = false
|
|
|
+ eventSink?(NSNumber(booleanLiteral: false))
|
|
|
+ }
|
|
|
+}
|