AGP 9 compiles Kotlin itself (android.builtInKotlin=true in every app), and warns that applying the Kotlin Gradle Plugin will soon fail. flutter_web_auth_2 5.1.0, keyboard_height_plugin 0.3.0 and flutter_tts 4.2.5 still apply it unconditionally, so their pub releases are copied into third_party/ with only their android/build.gradle changed, and the root overrides them by path (third_party/README.md says when to drop each). The servers' images copy third_party/, as pub refuses an override whose path is missing. third_party/ isn't our own code: left out of the analysis and the format check. All four apps' APKs build without the warning. A Kotlin daemon's session file that slipped into Train's android/ goes, and every app's android/.gitignore keeps .kotlin/ out. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
47 lines
1.8 KiB
Swift
47 lines
1.8 KiB
Swift
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))
|
|
}
|
|
}
|
|
|