KeyboardEventHandler.swift 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. //
  2. // KeyboardEventHandler.swift
  3. // flowy_infra_ui
  4. //
  5. // Created by Jaylen Bian on 7/17/21.
  6. //
  7. class KeyboardEventHandler: NSObject, FlutterStreamHandler {
  8. var isKeyboardShow: Bool = false
  9. var eventSink: FlutterEventSink?
  10. override init() {
  11. super.init()
  12. NotificationCenter.default.addObserver(
  13. self,
  14. selector: #selector(handleKeyboardWillShow),
  15. name: UIApplication.keyboardWillShowNotification,
  16. object: nil)
  17. NotificationCenter.default.addObserver(
  18. self,
  19. selector: #selector(handleKeyboardDidShow),
  20. name: UIApplication.keyboardDidShowNotification,
  21. object: nil)
  22. NotificationCenter.default.addObserver(
  23. self,
  24. selector: #selector(handleKeyboardWillHide),
  25. name: UIApplication.keyboardWillHideNotification,
  26. object: nil)
  27. NotificationCenter.default.addObserver(
  28. self,
  29. selector: #selector(handleKeyboardDidHide),
  30. name: UIApplication.keyboardDidHideNotification,
  31. object: nil)
  32. }
  33. func onListen(withArguments arguments: Any?, eventSink events: @escaping FlutterEventSink) -> FlutterError? {
  34. eventSink = events
  35. return nil
  36. }
  37. func onCancel(withArguments arguments: Any?) -> FlutterError? {
  38. eventSink = nil
  39. return nil
  40. }
  41. // MARK: Helper
  42. @objc
  43. private func handleKeyboardWillShow() {
  44. guard !isKeyboardShow else {
  45. return
  46. }
  47. isKeyboardShow = true
  48. eventSink?(NSNumber(booleanLiteral: true))
  49. }
  50. @objc
  51. private func handleKeyboardDidShow() {
  52. guard !isKeyboardShow else {
  53. return
  54. }
  55. isKeyboardShow = true
  56. eventSink?(NSNumber(booleanLiteral: true))
  57. }
  58. @objc
  59. private func handleKeyboardWillHide() {
  60. guard isKeyboardShow else {
  61. return
  62. }
  63. isKeyboardShow = false
  64. eventSink?(NSNumber(booleanLiteral: false))
  65. }
  66. @objc
  67. private func handleKeyboardDidHide() {
  68. guard isKeyboardShow else {
  69. return
  70. }
  71. isKeyboardShow = false
  72. eventSink?(NSNumber(booleanLiteral: false))
  73. }
  74. }