PackageTrack
Sign in Get early access

no_screenshot

Flutter plugin to prevent screenshots, detect screen recording, and show blur/color/image overlays in the app switcher on Android, iOS, macOS, Linux, Windows, and Web.

2.0.1 110K downloads/mo #1087 most downloaded on pub.dev FlutterPlaza/no_screenshot

What this package is like to depend on

Last release 15 days ago

08 Aug 2026

Ships unpredictably

gaps range from 8 days to 1.5 years

Nearly every release is documented

notes for 28 of 29 stable releases

2 versions withdrawn

withdrawn after publishing

4 years old

35 releases · first in 2022

22 releases in the last 12 months

see the full history below

Release timeline

35 releases · Oct 2022 to Aug 2026
2023 2024 2025 2026
Release Pre-release Withdrawn

Releases

latest 35
  1. 2.0.1 08 Aug 2026
    Release notes

    Patch release: Windows screenshot prevention now actually works.

    Fixed

    • fix(windows): screenshot prevention now applies SetWindowDisplayAffinity to the top-level window instead of the child Flutter view (#119). Display affinity is a top-level-window property and the Flutter runner reparents the view via SetParent, so previous versions silently protected nothing on Windows — screenshotOff() reported success while window content stayed fully capturable. The plugin now resolves the root ancestor on every call and re-asserts persisted prevention once the view is attached to its real top-level window, covering both the standard runner and multi-window embeddings (e.g. desktop_multi_window).

    Notes

    • With prevention active, the entire top-level window (title bar included) is hidden from capture, matching native behavior.
    • The plugin now effectively owns the top-level window's display affinity on Windows — don't combine it with other plugins that set it (e.g. window_manager's prevent-screen-capture).
    • Engines without a view (headless add-to-app) remain a no-op.
    • On Windows 10 older than version 2004 (build 19041), WDA_EXCLUDEFROMCAPTURE isn't available and the existing WDA_MONITOR fallback applies (window blacked out in captures).

    Full details: CHANGELOG
    On pub.dev: https://pub.dev/packages/no_screenshot/versions/2.0.1

    Open source →
    Release notes
    • fix(windows): screenshot prevention now applies SetWindowDisplayAffinity to the top-level window instead of the child Flutter view (#119). Display affinity is a top-level-window property, and the Flutter runner reparents the view via SetParent, so the previous code silently protected nothing — screenshotOff() reported success while window content stayed fully capturable. The plugin now resolves the root ancestor on every call and re-asserts persisted prevention once the view is attached to its real top-level window, covering both the standard runner and multi-window embeddings (e.g. desktop_multi_window). Notes: with prevention active, the entire top-level window (title bar included) is now hidden from capture, matching native behavior; the plugin now effectively owns the top-level window's display affinity, so don't combine it with other plugins that set it (e.g. window_manager's prevent-screen-capture); engines without a view (headless add-to-app) remain a no-op.
    Open source →
  2. 2.0.0 08 Aug 2026
    Release notes

    Breaking release. Two things to check before upgrading from 1.2.0:

    1. Prevention is now tracked as two separate claimsscreenshotOff()/screenshotOn()/toggleScreenshot() own an independent claim, and an active app-switcher overlay mode holds its own claim. Protection stays engaged while either claim is held. Apps that use only one of the two APIs behave exactly as before; sequences that mix them now resolve fail-secure instead of silently dropping protection. To fully disable protection, release both claims — e.g. overlayOff() + screenshotOn() (what SecureWidget / applyOverlayMode(OverlayMode.none) do).
    2. The minimum Flutter version is now 3.44 (Dart 3.12).

    What's new

    • feat: added overlayOff() — an idempotent method that deterministically disables any active app-switcher overlay mode (image, blur, or color) without needing to know the current state (#115).
    • feat (behavior change): the two-claim prevention model described above, on every platform. No API signatures changed. The persisted state gains an independent_prevention key; state written by older versions is migrated automatically (one-shot) on first launch.
    • fix: SecureWidget teardown, applyOverlayMode(OverlayMode.none), and applyOverlayMode(OverlayMode.secure) now clear any active overlay mode — a disposed SecureWidget(mode: OverlayMode.blur) no longer keeps showing the blur overlay in the app switcher.
    • fix: applyOverlayMode(OverlayMode.secure) takes the independent prevention claim before releasing the overlay's claim, so prevention stays continuously engaged across an overlay → secure transition (no transient unprotected frame).
    • fix(android): the plugin's build script no longer applies the Kotlin Gradle Plugin, completing the Built-in Kotlin migration and removing Flutter's "plugins that apply KGP" build warning (#120). Kotlin is provided by the Flutter tool itself: AGP's built-in Kotlin on AGP 9+, auto-applied KGP on older AGP versions.

    Notes

    • toggleScreenshot() now toggles the plugin's own independent claim rather than inspecting the current window flag. If your app sets FLAG_SECURE (or the platform equivalent) outside this plugin, use screenshotOff()/screenshotOn() explicitly instead of mixing it with toggleScreenshot().
    • Full details: CHANGELOG
    • On pub.dev: https://pub.dev/packages/no_screenshot/versions/2.0.0
    Open source →
    Release notes

    Breaking release. Two things to check before upgrading:

    1. Prevention is now tracked as two separate claims (released for testing in 1.3.0-beta.1, see below). Apps that use only screenshotOff()/screenshotOn() or only the overlay-mode APIs behave exactly as before; apps that mix the two now resolve fail-secure — protection stays on until both claims are released (overlayOff() + screenshotOn()).
    2. The minimum Flutter version is now 3.44 (Dart 3.12).
    • All changes from 1.3.0-beta.1 (see below): the new overlayOff() method, the two-claim prevention model, and the SecureWidget/applyOverlayMode overlay-teardown fixes.
    • fix(android): the plugin's build script no longer applies the Kotlin Gradle Plugin (KGP), not even conditionally — the Flutter tool detects KGP usage by statically scanning plugin build scripts, so the previous AGP-version conditional still triggered the "Your app uses the following plugins that apply Kotlin Gradle Plugin (KGP)" warning (#120). Kotlin is now provided by the Flutter tool itself: AGP's built-in Kotlin on AGP 9+, and an auto-applied KGP on older AGP versions. The minimum Flutter version is now 3.44 (was 3.38), the first release whose Gradle tooling auto-applies KGP for plugins.
    Open source →
  3. 1.3.0-beta.1 17 Jul 2026 pre-release
    Release notes

    Beta for developer testing before the stable 1.3.0 release. Install explicitly:

    dependencies:
      no_screenshot: ^1.3.0-beta.1

    What is in this beta (PR #117)

    • New API: overlayOff() — idempotently disables whichever app-switcher overlay mode is active (image, blur, or color) without needing to know the current state (#115)
    • Behavior change: prevention-claims model. Prevention is now tracked as two separate claims on all six platforms: screenshotOff()/screenshotOn()/toggleScreenshot() own an independent claim, and an active overlay mode holds its own. Protection stays engaged while either claim is held, so mixed API sequences resolve fail-secure instead of silently dropping protection. Apps using only the plain API or only the overlay API behave exactly as before. Full delta list in the CHANGELOG
    • SecureWidget teardown and applyOverlayMode transitions now clear overlay modes correctly (no more overlay surviving unmount or persisting across restarts), and overlay-to-secure transitions keep prevention continuously engaged
    • Persisted state migrates automatically (one-shot) from older versions
    • CI now compiles Linux, Windows, and Android and runs the browser test suite on every push

    What to test

    If your app mixes screenshotOff()/screenshotOn() with overlay modes, verify your protection flows — especially any sequence that previously relied on screenshotOn() or an overlay toggle-off dropping all protection. Release both claims (overlayOff() + screenshotOn()) to fully disable protection.

    Please report anything unexpected on #115 or a new issue.

    Open source →
    Release notes

    Beta — please test before the stable 1.3.0. This release changes how prevention state is tracked internally (details below). If your app mixes screenshotOff()/screenshotOn() with the overlay-mode APIs, please verify your flows and report issues.

    • feat: added overlayOff() — an idempotent method that deterministically disables any active app-switcher overlay mode (image, blur, or color), without needing to know the current state (#115). The counterpart to the existing screenshotWithImage()/screenshotWithBlur()/screenshotWithColor() enable methods.
    • feat (behavior change): prevention is now tracked as two separate claims on every platform — screenshotOff()/screenshotOn()/toggleScreenshot() own an independent claim, and an active overlay mode holds its own claim. Protection stays engaged while either claim is held. No API signatures changed, and apps that use only the plain methods or only the overlay methods behave exactly as before; sequences that mix the two APIs now resolve fail-secure instead of silently dropping protection:
      • screenshotWithBlur()screenshotOff()overlayOff(): prevention now stays on (the independent claim survives; previously it was silently dropped).
      • screenshotWithBlur()screenshotOn(): prevention now stays on while the overlay is active (the overlay's claim survives; previously prevention dropped while the blur overlay kept showing in the app switcher).
      • screenshotOff()toggleScreenshotWithBlur() on/off: prevention now stays on after the overlay toggles off (previously dropped).
      • To fully disable protection, release both claims — e.g. overlayOff() + screenshotOn() (what SecureWidget/applyOverlayMode(OverlayMode.none) do).
      • The persisted state gains an independent_prevention key; state written by older versions is migrated automatically (one-shot) on first launch.
      • toggleScreenshot() now toggles the plugin's own independent claim rather than inspecting the current window flag. If your app sets FLAG_SECURE (or the platform equivalent) outside this plugin, do not mix that with toggleScreenshot() — use screenshotOff()/screenshotOn() explicitly.
    • fix: SecureWidget teardown, applyOverlayMode(OverlayMode.none), and applyOverlayMode(OverlayMode.secure) now clear any active overlay mode. Previously they only called screenshotOn(), which leaves the overlay mode active (and persisted) — so a disposed SecureWidget(mode: OverlayMode.blur) kept showing the blur overlay in the app switcher.
    • fix: applyOverlayMode(OverlayMode.secure) takes the independent prevention claim before releasing the overlay's claim, so prevention stays continuously engaged across an overlay → secure transition (no transient unprotected frame).
    Open source →
  4. 1.2.0 14 Jul 2026
    Release notes

    Bug-fix release restoring compatibility with the latest toolchains and fixing two long-standing iOS/macOS issues.

    Fixes

    • fix(android): removed a duplicate Kotlin source-directory registration that made the plugin fail to compile on Flutter 3.44.4+ with "Conflicting declarations" errors (#114)
    • fix(ios): screenshot prevention now attaches lazily on the first method call, so screenshotOff() works even when scene lifecycle events never reach the plugin — e.g. apps migrated to the UIScene lifecycle with a custom SceneDelegate that does not subclass FlutterSceneDelegate (#105). screenshotOff()/toggleScreenshot() now return false instead of a misleading true when protection could not engage because no window is available yet
    • fix(ios): iOS builds running on Apple-silicon Macs ("Designed for iPhone/iPad") no longer show a permanently black/white window at launch (#107). Screenshot prevention is not supported by this technique on a macOS host, so screenshotOff() returns false there; app-switcher overlays and screenshot/recording detection are unaffected
    • fix(android): migrated to AGP's built-in Kotlin support, so the plugin keeps building on AGP 9+ where applying the Kotlin Gradle Plugin is no longer allowed (#104)
    • fix(macos): replaced CGWindowListCreateImage (removed in the macOS 26 "Tahoe" SDK) with cacheDisplay for the blur-overlay snapshot — no Screen Recording permission required. The blur overlay on macOS now always uses the system blur material and blurRadius has no effect there; content remains fully obscured in Mission Control / the app switcher. Also fixes blur-overlay edges fading to transparent on iOS and macOS — thanks @paulanatoleclaudot-betclic (#102)

    Full Changelog: v1.1.0...v1.2.0

    Open source →
    Release notes
    • fix(android): removed a duplicate Kotlin source-directory registration that made the plugin fail to compile on Flutter 3.44.4+ with "Conflicting declarations" errors (#114).
    • fix(ios): screenshot prevention now attaches lazily on the first method call, so screenshotOff() works even when scene lifecycle events never reach the plugin — e.g. apps migrated to the UIScene lifecycle with a custom SceneDelegate that does not subclass FlutterSceneDelegate (#105). screenshotOff()/toggleScreenshot() now return false instead of a misleading true when protection could not engage because no window is available yet.
    • fix(ios): iOS builds running on Apple-silicon Macs ("Designed for iPhone/iPad") no longer show a permanently black/white window at launch (#107). Screenshot prevention is not supported by this technique on a macOS host, so screenshotOff() now returns false there; app-switcher overlays and screenshot/recording detection are unaffected.
    • fix(android): migrated to AGP's built-in Kotlin support following the official plugin migration guide, so the plugin keeps building on AGP 9+ where applying the Kotlin Gradle Plugin is no longer allowed (#104, #110).
    • fix(macos): replaced CGWindowListCreateImage (removed in the macOS 26 "Tahoe" SDK) with cacheDisplay for the blur-overlay snapshot, keeping the plugin compiling against the latest SDK without requiring Screen Recording permission (#109). Because Flutter renders into a CAMetalLayer that AppKit snapshots cannot capture, the blur overlay on macOS now always uses the system blur material and blurRadius has no effect there; content remains fully obscured in Mission Control / the app switcher. Also fixes blur-overlay edges fading to transparent on iOS and macOS, thanks to @paulanatoleclaudot-betclic (#102).
    Open source →
  5. 1.1.0 25 Mar 2026
    Release notes

    Breaking Changes

    Renamed overlay image assets on all platforms to avoid generic-name collisions (#99) by @yar-tsar.

    Migration — rename your overlay image files:

    Platform Before After
    Android res/drawable/image.png res/drawable/no_screenshot_image.png
    iOS Assets.xcassets/image.imageset/ Assets.xcassets/NoScreenshotImage.imageset/
    macOS Assets.xcassets/image.imageset/ Assets.xcassets/NoScreenshotImage.imageset/

    No Dart-side code changes are required — only the asset files need to be renamed.

    Open source →
    Release notes
    • breaking: renamed overlay image assets on all platforms to avoid generic-name collisions (#99) by @yar-tsar.

      Migration — rename your overlay image files:

      Platform Before After
      Android res/drawable/image.png res/drawable/no_screenshot_image.png
      iOS Assets.xcassets/image.imageset/ Assets.xcassets/NoScreenshotImage.imageset/
      macOS Assets.xcassets/image.imageset/ Assets.xcassets/NoScreenshotImage.imageset/

      No Dart-side code changes are required — only the asset files need to be renamed.

    Open source →
  6. 1.0.0 01 Mar 2026
    Release notes

    What's New

    • Android 15 screen recording detectionWindowManager.addScreenRecordingCallback (API 35) provides true start/stop detection via SCREEN_RECORDING_STATE_VISIBLE / SCREEN_RECORDING_STATE_NOT_VISIBLE (#98)
    • Layered backward compatibility — API 35+ uses the new callback, API 34 falls back to Activity.ScreenCaptureCallback, API <34 graceful no-op
    • No code changes required — existing startScreenRecordingListening() / stopScreenRecordingListening() API automatically uses the best available native API

    Platform Recording Detection

    Platform Start Stop
    iOS 11+
    Android 15+ (API 35)
    Android 14 (API 34)
    macOS
    Linux
    Windows

    See the full CHANGELOG for details.

    Open source →
    Release notes

    Add WindowManager.addScreenRecordingCallback (API 35) for true
    start/stop recording detection. Falls back to ScreenCaptureCallback
    on API 34 and graceful no-op below. Closes #98.

    Open source →
    Release notes
    • feat(android): added Android 15 (API 35) screen recording detection via WindowManager.addScreenRecordingCallback — provides true start/stop detection with SCREEN_RECORDING_STATE_VISIBLE / SCREEN_RECORDING_STATE_NOT_VISIBLE (#98) by @fonkamloic.
    • feat(android): layered backward compatibility — API 35+ uses WindowManager.addScreenRecordingCallback, API 34 falls back to Activity.ScreenCaptureCallback, API <34 graceful no-op by @fonkamloic.
    • docs: updated README with Android 15 recording detection details, platform behavior table, and upgrade notes by @fonkamloic.
    Open source →
  7. 1.0.0-beta.2 20 Jul 2024 pre-release withdrawn
    Release notes
    • fix: Pub Point analysis failure.
    Open source →
  8. 1.0.0-beta.1 20 Jul 2024 pre-release withdrawn
    Release notes

    Summary of Changes

    • Automatic State Persistence: Removed the need to track didChangeAppLifecycleState. The state will now be automatically persisted using native platform SharedPreferences.
    • Enhanced Example: Updated the example app to demonstrate the new automatic state persistence and usage of the NoScreenshot plugin.
    • Stream Support: Provided a stream to listen for screenshot activities, making it easier to react to screenshots in real-time.
    • Bug Fixes: Fixed various bugs related to screenshot detection and state management on both Android and iOS platforms.
    • Documentation Updates: Improved documentation to reflect the new features and provide clearer usage examples.
    • Deprecation Notice: Deprecated the use of the constructor NoScreenshot() in favor of the singleton NoScreenshot.instance.
    Open source →
  9. 0.10.0 20 Feb 2026
    Release notes

    What's Changed

    • feat(ios): Migrate to UIScene lifecycle for iOS 26+ compatibility — FlutterSceneLifeCycleDelegate conformance, deprecated UIScreen.main removed, deployment target bumped to iOS 13.0 / Flutter >=3.38.0. ([#97])
    • fix(ios): Add @objc(NoScreenshotPlugin) annotation for Swift Package Manager builds — fixes "Unknown receiver 'NoScreenshotPlugin'" compilation error in GeneratedPluginRegistrant.m (#96).
    • fix(ios): Replace UIVisualEffectView blur overlay with CIGaussianBlur — the previous implementation darkened the screen instead of blurring it; now captures a window snapshot and applies a true Gaussian blur with configurable radius.

    Full Changelog: v0.9.1...v0.10.0

    Open source →
    Release notes
    • feat(ios): migrate to UIScene lifecycle for iOS 26+ compatibility — add FlutterSceneLifeCycleDelegate conformance so overlay show/hide logic fires under both the legacy UIApplicationDelegate and the new UIScene lifecycle; replace deprecated UIScreen.main usages; remove stale iOS 11 availability checks; bump deployment target to iOS 13.0 / Flutter >=3.38.0 by @fonkamloic.
    • fix(ios): add @objc(NoScreenshotPlugin) annotation for Swift Package Manager builds — fixes "Unknown receiver 'NoScreenshotPlugin'" compilation error in GeneratedPluginRegistrant.m (#96) by @fonkamloic.
    • fix(ios): replace UIVisualEffectView blur overlay with CIGaussianBlur — the previous implementation darkened the screen instead of blurring it; now captures a window snapshot and applies a true Gaussian blur with configurable radius by @fonkamloic.
    Open source →
  10. 0.9.2 20 Feb 2026
    Release notes

    What's Changed

    • fix(ios): Add @objc(NoScreenshotPlugin) annotation for Swift Package Manager builds — fixes "Unknown receiver 'NoScreenshotPlugin'" compilation error in GeneratedPluginRegistrant.m (#96).
    • fix(ios): Replace UIVisualEffectView blur overlay with CIGaussianBlur — the previous implementation darkened the screen instead of blurring it; now captures a window snapshot and applies a true Gaussian blur with configurable radius.

    Full Changelog: v0.9.1...v0.9.2

    Open source →
  11. 0.9.1 16 Feb 2026
    Release notes
    • chore: add pub.dev topics to pubspec.yaml.
    Open source →
  12. 0.9.0 14 Feb 2026
    Release notes

    What's New

    • Swift Package Manager supportPackage.swift for both iOS and macOS, with full CocoaPods backward compatibility.
    • Color picker — 8 preset colors in the example app's color overlay section. Picking a color while the overlay is active applies it immediately.
    • Blur radius slider — adjustable 1–100 slider that applies the blur overlay in real time.
    • Updated podspec source_files paths to reference SPM directory structure.
    • Added .build/ and .swiftpm/ to .gitignore and .pubignore.
    Open source →
    Release notes
    • feat(ios, macos): added Swift Package Manager support — Package.swift for both iOS and macOS, with CocoaPods backward compatibility by @fonkamloic.
    • feat(example): added color picker with 8 preset colors for the color overlay section by @fonkamloic.
    • feat(example): added blur radius slider (1–100) that applies the blur overlay in real time by @fonkamloic.
    • chore: updated podspec source_files paths to reference SPM directory structure by @fonkamloic.
    • chore: added .build/ and .swiftpm/ to .gitignore and .pubignore by @fonkamloic.
    Open source →
  13. 0.8.0 14 Feb 2026
    Release notes
    • feat: added timestamp and sourceApp metadata fields to ScreenshotSnapshot — backward-compatible defaults (P8) by @fonkamloic.
    • feat(android): screenshot metadata via MediaStore.Images.Media.DATE_ADDED and DISPLAY_NAME by @fonkamloic.
    • feat(ios): screenshot metadata via wall clock at detection time by @fonkamloic.
    • feat(macos): screenshot metadata via kMDItemContentCreationDate and kMDItemCreator / detected recording app name by @fonkamloic.
    • feat(linux): screenshot metadata via G_FILE_ATTRIBUTE_TIME_MODIFIED and inferred source app from filename prefix by @fonkamloic.
    • feat(windows): added Windows platform support — SetWindowDisplayAffinity(WDA_EXCLUDEFROMCAPTURE) for prevention, AddClipboardFormatListener + ReadDirectoryChangesW for screenshot detection, process scanning for recording detection (P11) by @fonkamloic.
    • feat: added granular callbacks — onScreenshotDetected, onScreenRecordingStarted, onScreenRecordingStopped with startCallbacks() / stopCallbacks() / removeAllCallbacks() API (P15) by @fonkamloic.
    • feat(web): added best-effort web platform support — right-click blocking, PrintScreen interception, user-select: none CSS, visibilitychange detection (P17) by @fonkamloic.
    • fix: fixed NoScreenshot.instance creating a new instance on every access — now a proper cached singleton by @fonkamloic.
    • fix: changed _instancePlatform from a captured field to a getter so platform is resolved at call time by @fonkamloic.
    • feat(example): added Granular Callbacks section with real-time event display by @fonkamloic.
    • feat(example): added web platform scaffolding by @fonkamloic.
    • fix(linux): replaced FlEventSink with fl_event_channel_send for stream event delivery by @fonkamloic.
    • fix(linux): fixed GObject typedefs, recording detection thread safety, stream caching, and platform-specific UI layout by @fonkamloic.
    • test: added granular callback tests with mock platform class by @fonkamloic.
    • test: added web platform test suite by @fonkamloic.
    • test: added screenshotStream coverage for event channel decoding and stream caching by @fonkamloic.
    Open source →
  14. 0.7.1 14 Feb 2026

    Nothing published for this version

  15. 0.7.0 14 Feb 2026
    Release notes
    • feat: added SecureWidget — a declarative Flutter widget that auto-enables screenshot protection on mount and disables on unmount (P6) by @fonkamloic.
    • feat: added SecureNavigatorObserver — a NavigatorObserver that applies different protection levels per named route (P7) by @fonkamloic.
    • feat: added SecureRouteConfig class for configuring per-route protection policies with OverlayMode, blurRadius, and color by @fonkamloic.
    • feat: added OverlayMode enum (none, secure, blur, color, image) and applyOverlayMode() helper for declarative protection by @fonkamloic.
    • feat: added idempotent screenshotWithImage(), screenshotWithBlur(), and screenshotWithColor() API methods — always enable the overlay (no toggle), safe to call repeatedly by @fonkamloic.
    • feat: added idempotent native handlers on Android, iOS, macOS, and Linux for the new always-enable methods by @fonkamloic.
    • feat(example): added SecureWidget demo page and per-route protection demo with payment, profile, and public pages by @fonkamloic.
    • test: added widget tests for SecureWidget (initState, dispose, didUpdateWidget, all overlay modes) by @fonkamloic.
    • test: added unit tests for SecureNavigatorObserver (didPush, didPop, didReplace, didRemove, defaultConfig, custom params) by @fonkamloic.
    • test: added method channel, platform interface, and NoScreenshot tests for new idempotent methods by @fonkamloic.
    • docs: updated README with SecureWidget and per-route protection sections, updated API reference table by @fonkamloic.
    Open source →
  16. 0.6.0 13 Feb 2026
    Release notes
    • feat: added configurable blurRadius parameter to toggleScreenshotWithBlur({double blurRadius}) — defaults to 30.0, customizable per platform by @fonkamloic.
    • feat: added toggleScreenshotWithColor({int color}) API — solid color overlay for app switcher / recents screen across all platforms by @fonkamloic.
    • feat(android): color overlay via a solid View with the specified ARGB color by @fonkamloic.
    • feat(ios): color overlay via UIView with the specified background color by @fonkamloic.
    • feat(macos): color overlay via NSView with the specified background color by @fonkamloic.
    • feat(linux): color overlay state tracked and persisted (best-effort — compositors control task switcher thumbnails) by @fonkamloic.
    • feat: color, blur, and image overlays are mutually exclusive — activating one deactivates the others, enforced at native level on all platforms by @fonkamloic.
    • feat(example): added Color Overlay section with color picker and toggle button by @fonkamloic.
    • feat(example): added localization strings for color overlay UI by @fonkamloic.
    • test: added method channel, platform interface, and NoScreenshot tests for toggleScreenshotWithBlur with custom radius and toggleScreenshotWithColor by @fonkamloic.
    • docs: updated README, CHANGELOG, roadmap, and example app to reflect configurable blur radius and color overlay support by @fonkamloic.
    Open source →
  17. 0.5.0 13 Feb 2026
    Release notes
    • feat: added toggleScreenshotWithBlur() API — Gaussian blur overlay for app switcher / recents screen (P2) by @fonkamloic.
    • feat(android): blur overlay via RenderEffect.createBlurEffect() on API 31+ (zero-copy GPU blur) and RenderScript.ScriptIntrinsicBlur on API 17–30 by @fonkamloic.
    • feat(ios): blur overlay via UIVisualEffectView with UIBlurEffect(style: .regular) by @fonkamloic.
    • feat(macos): blur overlay via NSVisualEffectView with .hudWindow material by @fonkamloic.
    • feat(linux): blur overlay state tracked and persisted (best-effort — compositors control task switcher thumbnails) by @fonkamloic.
    • feat: blur and image overlay are mutually exclusive — activating one deactivates the other, enforced at native level on all platforms by @fonkamloic.
    • feat: blur overlay state persists across app restarts via SharedPreferences / UserDefaults / JSON on all platforms by @fonkamloic.
    • feat(example): added Overlay Blur section with toggle button and status indicator by @fonkamloic.
    • fix(example): fixed stream subscription leak causing setState on unmounted widget — added proper dispose() and mounted check by @fonkamloic.
    • test: added method channel, platform interface, and NoScreenshot tests for toggleScreenshotWithBlur by @fonkamloic.
    • docs: updated README, CHANGELOG, roadmap, and example app to reflect blur overlay support by @fonkamloic.
    Open source →
  18. 0.4.0 12 Feb 2026
    Release notes
    • feat: detect screen recording start/stop events across all platforms (P1) by @fonkamloic.
    • feat(ios): event-driven screen recording detection via UIScreen.capturedDidChangeNotification (iOS 11+) — detects both start and stop by @fonkamloic.
    • feat(android): screen recording detection via Activity.ScreenCaptureCallback (API 34+) — detects recording start; graceful no-op on pre-34 devices by @fonkamloic.
    • feat(macos): best-effort screen recording detection via NSWorkspace process monitoring — polls for known recording apps (QuickTime Player, OBS, Loom, Kap, ffmpeg, screencapture, simplescreenrecorder) by @fonkamloic.
    • feat(linux): best-effort screen recording detection via /proc process scanning — polls for known recording tools (ffmpeg, obs, simplescreenrecorder, kazam, peek, recordmydesktop, vokoscreen) by @fonkamloic.
    • feat: added isScreenRecording field to ScreenshotSnapshot — backward-compatible, defaults to false when omitted by native code by @fonkamloic.
    • feat: added startScreenRecordingListening() and stopScreenRecordingListening() API methods — recording detection is independent of screenshot detection by @fonkamloic.
    • feat(example): added Recording Monitoring section with enable/disable buttons and real-time isScreenRecording status display by @fonkamloic.
    • test: added method channel, platform interface, and ScreenshotSnapshot tests for screen recording detection by @fonkamloic.
    • docs: updated README, CHANGELOG, roadmap, and example app to reflect screen recording detection support by @fonkamloic.
    Open source →
  19. 0.3.6 11 Feb 2026
    Release notes
    • feat(linux): added Linux support with screenshot detection via GFileMonitor (inotify), monitoring ~/Pictures/Screenshots/, ~/Pictures/, and XDG pictures directory by @fonkamloic.
    • feat(linux): screenshot file path is available on Linux (via GFileMonitor) — same as macOS by @fonkamloic.
    • feat(linux): screenshot prevention and image overlay are best-effort on Linux — state is tracked and persisted, but Linux compositors (Wayland / X11) do not expose a FLAG_SECURE-equivalent API by @fonkamloic.
    • feat(linux): state persistence via JSON file in $XDG_DATA_HOME/no_screenshot/state.json by @fonkamloic.
    • docs: updated README, CHANGELOG, and example app to reflect Linux support by @fonkamloic.
    Open source →
  20. 0.3.5 10 Feb 2026
    Release notes
    • fix(ios): fix iOS 26 RTL layout shift by dropping ScreenProtectorKit and inlining screenshot prevention with forceLeftToRight semantics by @fonkamloic.
    • fix(ios): fix EXC_BAD_ACCESS crash in _collectExistingTraitCollectionsForTraitTracking on iOS 26+ caused by circular view hierarchy by @fonkamloic.
    • fix(ios): fix bottom-right content alignment caused by Auto Layout constraint offset during layer reparenting by @fonkamloic.
    • feat(ios): removed ScreenProtectorKit dependency — all iOS screenshot prevention is now inlined by @fonkamloic.
    • feat(example): add EN/AR localization and RTL toggle to example app for testing RTL layout by @fonkamloic.
    • docs: document screenshotPath availability — file path is only available on macOS; Android and iOS return a placeholder by @fonkamloic.
    • docs: add LTR/RTL language support note to README by @fonkamloic.
    • docs: add GIF demo placeholders for every feature on every platform by @fonkamloic.
    Open source →
  21. 0.3.4 10 Feb 2026
    Release notes
    • fix(macos): detect clipboard-only screenshots (Cmd+Ctrl+Shift+3/4) via pasteboard polling by @fonkamloic.
    • fix(macos): detect repeated screenshots while screencaptureui is still running by @fonkamloic.
    • fix(macos): track screencaptureui process lifecycle (launch + termination) for reliable detection by @fonkamloic.
    • fix(macos): add 2s debounce to suppress duplicate detection events while allowing file-path upgrades from NSMetadataQuery by @fonkamloic.
    • docs: updated macOS screenshot monitoring documentation to reflect three detection methods by @fonkamloic.
    Open source →
  22. 0.3.3 09 Feb 2026
    Release notes
    • feat(macos): added macOS support for toggleScreenshotWithImage() by @fonkamloic.
    • feat: added toggleScreenshotWithImage() API to display a custom image overlay when the app goes to the background or app switcher, preventing screenshot content exposure on both Android and iOS by @zhangyuanyuan-bear and @fonkamloic.
    • feat: image overlay mode persists across app restarts via platform SharedPreferences/UserDefaults by @zhangyuanyuan-bear and @fonkamloic.
    • fix(ios): prevent stale image overlay by consolidating lifecycle handling by @BranislavKljaic96 and @fonkamloic.
    • fix(ios): native code now works with both SceneDelegate and AppDelegate by @BranislavKljaic96 in https://github.com/FlutterPlaza/no_screenshot/pull/86.
    • fix: use Executors for SharedPreferences access on Android to avoid strict mode violations on startup by @qk7b in https://github.com/FlutterPlaza/no_screenshot/pull/74.
    • fix: properly clean up image overlay and activity references on detach/config changes (Android) by @fonkamloic.
    • chore: updated Kotlin and Gradle versions in Android build configuration by @T-moz in https://github.com/FlutterPlaza/no_screenshot/pull/76.
    • chore: updated example app to demonstrate the new image overlay feature by @fonkamloic.
    • test: added toggleScreenshotWithImage tests and fixed CI codecov upload by @fonkamloic.
    • ci: added automated pub.dev publish workflow by @fonkamloic.
    Open source →
  23. 0.3.3-beta.1 08 Feb 2026 pre-release
    Release notes
    • feat: added toggleScreenshotWithImage() API to display a custom image overlay when the app goes to the background or app switcher, preventing screenshot content exposure on both Android and iOS by @zhangyuanyuan-bear and @fonkamloic.
    • feat: image overlay mode persists across app restarts via platform SharedPreferences/UserDefaults by @zhangyuanyuan-bear and @fonkamloic.
    • fix: use Executors for SharedPreferences access on Android to avoid strict mode violations on startup by @qk7b.
    • fix: properly clean up image overlay and activity references on detach/config changes (Android) by @fonkamloic.
    • chore: updated Kotlin and Gradle versions in Android build configuration by @T-moz.
    • chore: updated example app to demonstrate the new image overlay feature by @fonkamloic.
    • ci: added automated pub.dev publish workflow by @fonkamloic.
    Open source →
  24. 0.3.2 07 Feb 2026
    Release notes
    • feat: macos support by @fonkamloic in https://github.com/FlutterPlaza/no_screenshot/pull/51
    • fix: fix screenshot state not persisting on iOS by @fonkamloic in https://github.com/FlutterPlaza/no_screenshot/pull/45
    • fix: duplicate interface definition for class 'NoScreenshotPlugin' by @fonkamloic in https://github.com/FlutterPlaza/no_screenshot/pull/62
    • chore(deps): bump actions/checkout from 2 to 4 by @dependabot in https://github.com/FlutterPlaza/no_screenshot/pull/43
    • chore(deps): bump codecov/codecov-action from 4.0.1 to 4.5.0 by @dependabot in https://github.com/FlutterPlaza/no_screenshot/pull/42
    Open source →
  25. 0.3.2-beta.3 14 Dec 2024 pre-release
    Release notes
    • chore: updated pkg version by @fonkamloic in https://github.com/FlutterPlaza/no_screenshot/pull/63
    • fix: duplicate interface definition for class 'NoScreenshotPlugin' by @fonkamloic in https://github.com/FlutterPlaza/no_screenshot/pull/62
    Open source →
  26. 0.3.2-beta.1 08 Nov 2024 pre-release
    Release notes
    • fix: fix screenshot state not persisting on iOS by @fonkamloic in https://github.com/FlutterPlaza/no_screenshot/pull/45
    • chore(deps): bump actions/checkout from 2 to 4 by @dependabot in https://github.com/FlutterPlaza/no_screenshot/pull/43
    • chore(deps): bump codecov/codecov-action from 4.0.1 to 4.5.0 by @dependabot in https://github.com/FlutterPlaza/no_screenshot/pull/42
    • feat: macos support by @fonkamloic in https://github.com/FlutterPlaza/no_screenshot/pull/51
    Open source →
  27. 0.3.1 24 Aug 2024
    Release notes
    • feat: added MacOS support
    • fix: fix screenshot state not persisting on iOS
    • chore: added more examples.
    Open source →
  28. 0.2.0 15 Jul 2024
    Release notes
    • Upgrade android to support AGP 8.X
    • merged fix by @alberto-cappellina PR[https://github.com/FlutterPlaza/no_screenshot/pull/27]
    • gradle:7.1.2 -> 7.4.2
    • kotlin_version = '1.6.10' -> '1.6.21'
    Open source →
  29. 0.0.1 28 Oct 2022
    Release notes

    Package has 3 basic functionalities on android and IOS via method channel. - Disable screenshot support in app - Enable screenshot support in app - Toggle between enable and disable state

    Open source →
  30. 0.0.1+1 29 Oct 2022
    Release notes

    Updated readme and added sample usage.

    Open source →
  31. 0.0.1+3 01 Nov 2022
    Release notes
    • Reverted to BSD 3 license
    • Added documentation
    • Made NoScreenshot class a singleton
    Open source →
  32. 0.0.1+4 07 Jan 2023
    Release notes Open source →
  33. 0.0.1+5 09 Jan 2023
    Release notes
    • Fixed broken link from pub dev analyses
    Open source →
  34. 0.0.1+6 24 Jan 2023
    Release notes
    • Removed the non implemented override functions in android life-cycle
    Open source →
  35. 0.0.1+7 15 Jul 2024
    Release notes
    • Set the namespace for android
    • Specify a more current version of ScreenProtectorKit. This resolves iOS17 issues.
    • fix: screenshot prevention on iOS
    • updated readme by @Musaddiq635 PR[https://github.com/FlutterPlaza/no_screenshot/pull/26]
    • merged fix by @ggiordan PR[https://github.com/FlutterPlaza/no_screenshot/pull/29]
    Open source →

Every package, every release, already written down.

The archive is open and free. Watching your own project is what we are building next.

Browse the archive