diff --git a/packages/pasteboard/lib/src/pasteboard_platform_io.dart b/packages/pasteboard/lib/src/pasteboard_platform_io.dart index dcf02d1f..279c6abf 100644 --- a/packages/pasteboard/lib/src/pasteboard_platform_io.dart +++ b/packages/pasteboard/lib/src/pasteboard_platform_io.dart @@ -61,7 +61,7 @@ class PasteboardPlatformIO implements PasteboardPlatform { if (image == null) { return; } - if (Platform.isIOS) { + if (Platform.isIOS || Platform.isMacOS) { await _channel.invokeMethod('writeImage', image); } } diff --git a/packages/pasteboard/macos/Classes/PasteboardPlugin.swift b/packages/pasteboard/macos/Classes/PasteboardPlugin.swift index d72cdc63..75b310a8 100644 --- a/packages/pasteboard/macos/Classes/PasteboardPlugin.swift +++ b/packages/pasteboard/macos/Classes/PasteboardPlugin.swift @@ -1,5 +1,6 @@ import Cocoa import FlutterMacOS +import AppKit public class PasteboardPlugin: NSObject, FlutterPlugin { public static func register(with registrar: FlutterPluginRegistrar) { @@ -20,11 +21,24 @@ public class PasteboardPlugin: NSObject, FlutterPlugin { } else { result(FlutterError(code: "0", message: "arguments is not String list.", details: nil)) } + case "writeImage": + if let data = call.arguments as? FlutterStandardTypedData { + writeImageToPasteboard(data.data, result: result) + } else { + result(FlutterError(code: "0", message: "arguments is not data", details: nil)) + } default: result(FlutterMethodNotImplemented) } } + private func writeImageToPasteboard(_ data: Data, result: FlutterResult) { + let image = NSImage(data: data) ?? NSImage() + NSPasteboard.general.clearContents() + NSPasteboard.general.writeObjects([image as NSImage]) + result(nil) + } + private func image(result: FlutterResult) { guard let image = NSPasteboard.general.readObjects(forClasses: [NSImage.self], options: nil)?.first as? NSImage else { result(nil)