Flutter's Clipboard API only exposes text shapes. Banlu's chat composer needs image bytes from the system clipboard for desktop paste, so add a UxClipboard facade backed by per-platform native plugins: * iOS: prefer raw PNG/JPEG bytes off the pasteboard, fall back to re-encoding `UIPasteboard.image` as PNG. * macOS: prefer NSPasteboard `.png`, fall back to TIFF transcoded through NSBitmapImageRep so screenshots / Preview hand-offs still work. * Android: read primary ClipData's first item URI and stream the bytes through ContentResolver — don't trust the clip description's MIME, copy whatever the resolver returns. Returns null (never throws) when the clipboard has no image — callers treat null as "fall through to text paste".
21 lines
529 B
Swift
21 lines
529 B
Swift
import FlutterMacOS
|
|
import AppKit
|
|
|
|
public class UxPlugin: NSObject, FlutterPlugin {
|
|
private static var plugins: [NativePlugin] = []
|
|
|
|
public static func register(with registrar: FlutterPluginRegistrar) {
|
|
plugins = [
|
|
FilePlugin(),
|
|
ClipboardPlugin(),
|
|
]
|
|
for plugin in plugins {
|
|
plugin.register(with: registrar)
|
|
}
|
|
}
|
|
|
|
public func handle(_ call: FlutterMethodCall, result: @escaping FlutterResult) {
|
|
result(FlutterMethodNotImplemented)
|
|
}
|
|
}
|