import "package:flutter/foundation.dart"; import "package:flutter/services.dart"; import "package:flutter/widgets.dart"; // macOS side of the eyedropper. Everything else that isnt web lands here too // and simply reports "no native sampler", which is the honest answer - theres // no handler registered on windows/linux/ios/android. const _channel = MethodChannel("garage/eyedropper"); bool? _cachedAvailability; Future nativeEyedropperAvailable() async { if (_cachedAvailability != null) return _cachedAvailability!; if (defaultTargetPlatform != TargetPlatform.macOS) { _cachedAvailability = false; return false; } try { _cachedAvailability = await _channel.invokeMethod("isAvailable"); } catch (error, stack) { // an older macOS (or a runner thats never been rebuilt with the swift // side in it) - not fatal, we just fall back to in-app sampling. debugPrint("eyedropper: isAvailable failed: $error\n$stack"); _cachedAvailability = false; } return _cachedAvailability ?? false; } Future pickNativeScreenColor() async { try { final picked = await _channel.invokeMapMethod("pick"); if (picked == null) return null; final r = picked["r"]; final g = picked["g"]; final b = picked["b"]; if (r == null || g == null || b == null) { debugPrint("eyedropper: native pick returned a malformed colour $picked"); return null; } return Color.fromARGB(255, r, g, b); } catch (error, stack) { debugPrint("eyedropper: native pick failed: $error\n$stack"); return null; } }