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 2026Releases
latest 35-
2.0.108 Aug 2026Release notes
Open source →Patch release: Windows screenshot prevention now actually works.
Fixed
- fix(windows): screenshot prevention now applies
SetWindowDisplayAffinityto 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 viaSetParent, 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_EXCLUDEFROMCAPTUREisn't available and the existingWDA_MONITORfallback applies (window blacked out in captures).
Full details: CHANGELOG
On pub.dev: https://pub.dev/packages/no_screenshot/versions/2.0.1Release notes
Open source →- fix(windows): screenshot prevention now applies
SetWindowDisplayAffinityto 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 viaSetParent, 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.
- fix(windows): screenshot prevention now applies
-
2.0.008 Aug 2026Release notes
Open source →Breaking release. Two things to check before upgrading from 1.2.0:
- Prevention is now tracked as two separate claims —
screenshotOff()/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()(whatSecureWidget/applyOverlayMode(OverlayMode.none)do). - 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_preventionkey; state written by older versions is migrated automatically (one-shot) on first launch. - fix:
SecureWidgetteardown,applyOverlayMode(OverlayMode.none), andapplyOverlayMode(OverlayMode.secure)now clear any active overlay mode — a disposedSecureWidget(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 setsFLAG_SECURE(or the platform equivalent) outside this plugin, usescreenshotOff()/screenshotOn()explicitly instead of mixing it withtoggleScreenshot().- Full details: CHANGELOG
- On pub.dev: https://pub.dev/packages/no_screenshot/versions/2.0.0
Release notes
Open source →Breaking release. Two things to check before upgrading:
- 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()). - 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 theSecureWidget/applyOverlayModeoverlay-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.
- Prevention is now tracked as two separate claims —
-
1.3.0-beta.117 Jul 2026 pre-releaseRelease notes
Open source →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 SecureWidgetteardown andapplyOverlayModetransitions 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 onscreenshotOn()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.
Release notes
Open source →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 existingscreenshotWithImage()/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()(whatSecureWidget/applyOverlayMode(OverlayMode.none)do). - The persisted state gains an
independent_preventionkey; 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 setsFLAG_SECURE(or the platform equivalent) outside this plugin, do not mix that withtoggleScreenshot()— usescreenshotOff()/screenshotOn()explicitly.
- fix:
SecureWidgetteardown,applyOverlayMode(OverlayMode.none), andapplyOverlayMode(OverlayMode.secure)now clear any active overlay mode. Previously they only calledscreenshotOn(), which leaves the overlay mode active (and persisted) — so a disposedSecureWidget(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).
- New API:
-
1.2.014 Jul 2026Release notes
Open source →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 customSceneDelegatethat does not subclassFlutterSceneDelegate(#105).screenshotOff()/toggleScreenshot()now returnfalseinstead of a misleadingtruewhen 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()returnsfalsethere; 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) withcacheDisplayfor the blur-overlay snapshot — no Screen Recording permission required. The blur overlay on macOS now always uses the system blur material andblurRadiushas 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
Release notes
Open source →- 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 customSceneDelegatethat does not subclassFlutterSceneDelegate(#105).screenshotOff()/toggleScreenshot()now returnfalseinstead of a misleadingtruewhen 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 returnsfalsethere; 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) withcacheDisplayfor the blur-overlay snapshot, keeping the plugin compiling against the latest SDK without requiring Screen Recording permission (#109). Because Flutter renders into aCAMetalLayerthat AppKit snapshots cannot capture, the blur overlay on macOS now always uses the system blur material andblurRadiushas 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).
-
1.1.025 Mar 2026Release notes
Open source →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.pngres/drawable/no_screenshot_image.pngiOS 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.
Release notes
Open source →-
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.pngres/drawable/no_screenshot_image.pngiOS 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.
-
-
1.0.001 Mar 2026Release notes
Open source →What's New
- Android 15 screen recording detection —
WindowManager.addScreenRecordingCallback(API 35) provides true start/stop detection viaSCREEN_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.
Release notes
Open source →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.Release notes
Open source →- feat(android): added Android 15 (API 35) screen recording detection via
WindowManager.addScreenRecordingCallback— provides true start/stop detection withSCREEN_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 toActivity.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.
- Android 15 screen recording detection —
-
1.0.0-beta.220 Jul 2024 pre-release withdrawn -
1.0.0-beta.120 Jul 2024 pre-release withdrawnRelease notes
Open source →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
NoScreenshotplugin. - 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 singletonNoScreenshot.instance.
- Automatic State Persistence: Removed the need to track
-
0.10.020 Feb 2026Release notes
Open source →What's Changed
- feat(ios): Migrate to
UIScenelifecycle for iOS 26+ compatibility —FlutterSceneLifeCycleDelegateconformance, deprecatedUIScreen.mainremoved, 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 inGeneratedPluginRegistrant.m(#96). - fix(ios): Replace
UIVisualEffectViewblur overlay withCIGaussianBlur— 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
Release notes
Open source →- feat(ios): migrate to
UIScenelifecycle for iOS 26+ compatibility — addFlutterSceneLifeCycleDelegateconformance so overlay show/hide logic fires under both the legacyUIApplicationDelegateand the newUIScenelifecycle; replace deprecatedUIScreen.mainusages; 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 inGeneratedPluginRegistrant.m(#96) by @fonkamloic. - fix(ios): replace
UIVisualEffectViewblur overlay withCIGaussianBlur— 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.
- feat(ios): Migrate to
-
0.9.220 Feb 2026Release notes
Open source →What's Changed
- fix(ios): Add
@objc(NoScreenshotPlugin)annotation for Swift Package Manager builds — fixes "Unknown receiver 'NoScreenshotPlugin'" compilation error inGeneratedPluginRegistrant.m(#96). - fix(ios): Replace
UIVisualEffectViewblur overlay withCIGaussianBlur— 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
- fix(ios): Add
-
0.9.116 Feb 2026 -
0.9.014 Feb 2026Release notes
Open source →What's New
- Swift Package Manager support —
Package.swiftfor 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_filespaths to reference SPM directory structure. - Added
.build/and.swiftpm/to.gitignoreand.pubignore.
Release notes
Open source →- feat(ios, macos): added Swift Package Manager support —
Package.swiftfor 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_filespaths to reference SPM directory structure by @fonkamloic. - chore: added
.build/and.swiftpm/to.gitignoreand.pubignoreby @fonkamloic.
- Swift Package Manager support —
-
0.8.014 Feb 2026Release notes
Open source →- feat: added
timestampandsourceAppmetadata fields toScreenshotSnapshot— backward-compatible defaults (P8) by @fonkamloic. - feat(android): screenshot metadata via
MediaStore.Images.Media.DATE_ADDEDandDISPLAY_NAMEby @fonkamloic. - feat(ios): screenshot metadata via wall clock at detection time by @fonkamloic.
- feat(macos): screenshot metadata via
kMDItemContentCreationDateandkMDItemCreator/ detected recording app name by @fonkamloic. - feat(linux): screenshot metadata via
G_FILE_ATTRIBUTE_TIME_MODIFIEDand inferred source app from filename prefix by @fonkamloic. - feat(windows): added Windows platform support —
SetWindowDisplayAffinity(WDA_EXCLUDEFROMCAPTURE)for prevention,AddClipboardFormatListener+ReadDirectoryChangesWfor screenshot detection, process scanning for recording detection (P11) by @fonkamloic. - feat: added granular callbacks —
onScreenshotDetected,onScreenRecordingStarted,onScreenRecordingStoppedwithstartCallbacks()/stopCallbacks()/removeAllCallbacks()API (P15) by @fonkamloic. - feat(web): added best-effort web platform support — right-click blocking, PrintScreen interception,
user-select: noneCSS,visibilitychangedetection (P17) by @fonkamloic. - fix: fixed
NoScreenshot.instancecreating a new instance on every access — now a proper cached singleton by @fonkamloic. - fix: changed
_instancePlatformfrom 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
FlEventSinkwithfl_event_channel_sendfor 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
screenshotStreamcoverage for event channel decoding and stream caching by @fonkamloic.
- feat: added
-
0.7.114 Feb 2026Nothing published for this version
-
0.7.014 Feb 2026Release notes
Open source →- feat: added
SecureWidget— a declarative Flutter widget that auto-enables screenshot protection on mount and disables on unmount (P6) by @fonkamloic. - feat: added
SecureNavigatorObserver— aNavigatorObserverthat applies different protection levels per named route (P7) by @fonkamloic. - feat: added
SecureRouteConfigclass for configuring per-route protection policies withOverlayMode,blurRadius, andcolorby @fonkamloic. - feat: added
OverlayModeenum (none,secure,blur,color,image) andapplyOverlayMode()helper for declarative protection by @fonkamloic. - feat: added idempotent
screenshotWithImage(),screenshotWithBlur(), andscreenshotWithColor()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
NoScreenshottests for new idempotent methods by @fonkamloic. - docs: updated README with SecureWidget and per-route protection sections, updated API reference table by @fonkamloic.
- feat: added
-
0.6.013 Feb 2026Release notes
Open source →- feat: added configurable
blurRadiusparameter totoggleScreenshotWithBlur({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
Viewwith the specified ARGB color by @fonkamloic. - feat(ios): color overlay via
UIViewwith the specified background color by @fonkamloic. - feat(macos): color overlay via
NSViewwith 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
NoScreenshottests fortoggleScreenshotWithBlurwith custom radius andtoggleScreenshotWithColorby @fonkamloic. - docs: updated README, CHANGELOG, roadmap, and example app to reflect configurable blur radius and color overlay support by @fonkamloic.
- feat: added configurable
-
0.5.013 Feb 2026Release notes
Open source →- 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) andRenderScript.ScriptIntrinsicBluron API 17–30 by @fonkamloic. - feat(ios): blur overlay via
UIVisualEffectViewwithUIBlurEffect(style: .regular)by @fonkamloic. - feat(macos): blur overlay via
NSVisualEffectViewwith.hudWindowmaterial 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
setStateon unmounted widget — added properdispose()andmountedcheck by @fonkamloic. - test: added method channel, platform interface, and
NoScreenshottests fortoggleScreenshotWithBlurby @fonkamloic. - docs: updated README, CHANGELOG, roadmap, and example app to reflect blur overlay support by @fonkamloic.
- feat: added
-
0.4.012 Feb 2026Release notes
Open source →- 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
NSWorkspaceprocess monitoring — polls for known recording apps (QuickTime Player, OBS, Loom, Kap, ffmpeg, screencapture, simplescreenrecorder) by @fonkamloic. - feat(linux): best-effort screen recording detection via
/procprocess scanning — polls for known recording tools (ffmpeg, obs, simplescreenrecorder, kazam, peek, recordmydesktop, vokoscreen) by @fonkamloic. - feat: added
isScreenRecordingfield toScreenshotSnapshot— backward-compatible, defaults tofalsewhen omitted by native code by @fonkamloic. - feat: added
startScreenRecordingListening()andstopScreenRecordingListening()API methods — recording detection is independent of screenshot detection by @fonkamloic. - feat(example): added Recording Monitoring section with enable/disable buttons and real-time
isScreenRecordingstatus display by @fonkamloic. - test: added method channel, platform interface, and
ScreenshotSnapshottests for screen recording detection by @fonkamloic. - docs: updated README, CHANGELOG, roadmap, and example app to reflect screen recording detection support by @fonkamloic.
-
0.3.611 Feb 2026Release notes
Open source →- 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.jsonby @fonkamloic. - docs: updated README, CHANGELOG, and example app to reflect Linux support by @fonkamloic.
- feat(linux): added Linux support with screenshot detection via
-
0.3.510 Feb 2026Release notes
Open source →- fix(ios): fix iOS 26 RTL layout shift by dropping
ScreenProtectorKitand inlining screenshot prevention withforceLeftToRightsemantics by @fonkamloic. - fix(ios): fix
EXC_BAD_ACCESScrash in_collectExistingTraitCollectionsForTraitTrackingon 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
ScreenProtectorKitdependency — 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
screenshotPathavailability — 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.
- fix(ios): fix iOS 26 RTL layout shift by dropping
-
0.3.410 Feb 2026Release notes
Open source →- fix(macos): detect clipboard-only screenshots (Cmd+Ctrl+Shift+3/4) via pasteboard polling by @fonkamloic.
- fix(macos): detect repeated screenshots while
screencaptureuiis still running by @fonkamloic. - fix(macos): track
screencaptureuiprocess lifecycle (launch + termination) for reliable detection by @fonkamloic. - fix(macos): add 2s debounce to suppress duplicate detection events while allowing file-path upgrades from
NSMetadataQueryby @fonkamloic. - docs: updated macOS screenshot monitoring documentation to reflect three detection methods by @fonkamloic.
-
0.3.309 Feb 2026Release notes
Open source →- 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
Executorsfor 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
toggleScreenshotWithImagetests and fixed CI codecov upload by @fonkamloic. - ci: added automated pub.dev publish workflow by @fonkamloic.
- feat(macos): added macOS support for
-
0.3.3-beta.108 Feb 2026 pre-releaseRelease notes
Open source →- 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
Executorsfor 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.
- feat: added
-
0.3.207 Feb 2026Release notes
Open source →- 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
-
0.3.2-beta.314 Dec 2024 pre-releaseRelease notes
Open source →- 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
-
0.3.2-beta.108 Nov 2024 pre-releaseRelease notes
Open source →- 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
-
0.3.124 Aug 2024Release notes
Open source →- feat: added MacOS support
- fix: fix screenshot state not persisting on iOS
- chore: added more examples.
-
0.2.015 Jul 2024Release notes
Open source →- 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'
-
0.0.128 Oct 2022Release notes
Open source →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
-
0.0.1+129 Oct 2022 -
0.0.1+301 Nov 2022Release notes
Open source →- Reverted to BSD 3 license
- Added documentation
- Made
NoScreenshotclass a singleton
-
0.0.1+407 Jan 2023 -
0.0.1+509 Jan 2023 -
0.0.1+624 Jan 2023 -
0.0.1+715 Jul 2024Release notes
Open source →- 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]