Secure Content

Protect sensitive Flutter UI from screenshots, recording visibility, app switcher previews, and runtime risk states on Android and iOS.


Platform Pub Package License: MIT


Screenshots

Android - Screen recording demo

https://user-images.githubusercontent.com/60510869/154502746-830d9198-8f11-46ba-9246-784def00f610.mp4

iOS - Screenshot result
iOS - Screen recording demo

https://github.com/user-attachments/assets/0b4e10ac-d592-4b5b-92bf-72f51b2cf570

iOS - App switcher demo

https://github.com/user-attachments/assets/b6ef5914-eb3a-4e17-be0c-2f00538cffec

Features

  • Screenshot prevention and recording obscuring
  • App switcher protection with configurable color
  • Android 14+ screenshot callback support
  • Biometric/device credential re-auth hooks
  • Inactivity auto-lock for secure areas
  • Integrity risk checks (root/jailbreak/debugger/emulator heuristics)
  • Soft mode events and optional hard-block mode
  • Sensitive clipboard with TTL-based auto-clear
  • Risk-state watermark overlay (only shown when needed)

Installation

dependencies:
  secure_content: ^2.1.0-beta.1

Quick Start

import 'package:flutter/material.dart';
import 'package:secure_content/secure_content.dart';

SecureContentScope(
  enabled: true,
  policy: const SecureContentPolicy(
    requireBiometricOnResume: true,
    inactivityTimeout: Duration(seconds: 30),
    enableIntegrityChecks: true,
    hardBlockOnIntegrityRisk: false,
    enableRiskWatermark: true,
    watermarkText: 'CONFIDENTIAL',
  ),
  onEvent: (event) {
    debugPrint('Secure event: ${event.type.name}');
  },
  child: const YourSensitiveWidget(),
)

Global Protection

await SecureContent.setGlobalProtection(
  true,
  protectInAppSwitcher: true,
  appSwitcherColor: Colors.black,
);

Clipboard TTL

await SecureContent.setSensitiveClipboard(
  'one-time code: 123456',
  clearAfter: const Duration(seconds: 10),
);

Events

Listen to all secure events globally:

SecureContent.events.listen((event) {
  debugPrint('Secure event: ${event.type.name}');
});

Key event types include:

  • screenshotCaptured
  • recordingStarted / recordingStopped
  • biometricAuthSucceeded / biometricAuthFailed / biometricUnavailable
  • integritySafe / integrityRiskDetected
  • clipboardSet / clipboardCleared
  • idleLockActivated / idleLockReleased

Platform Support

Feature iOS Android
Screenshot Prevention
Screen Recording Prevention
Screenshot Detection Callback ✅ (Android 14+)
Screen Recording Start Callback
Screen Recording Stop Callback
Biometric Re-Auth
Inactivity Auto-Lock
Integrity Risk Check
Hard Block Mode
Sensitive Clipboard TTL
Risk-State Watermark
App Switcher Protection
Dynamic Security Toggle
Full App Protection

Notes

  • Android screenshot callback requires Android 14+.
  • Android system clipboard "Copied to clipboard" toast is controlled by the OS and cannot be disabled by apps.
  • Integrity checks are heuristic signals, not a guaranteed anti-tamper boundary.

Example

See example/lib/main.dart for a complete implementation including:

  • global protection toggle
  • biometric trigger
  • integrity check trigger
  • clipboard TTL action
  • hard-block mode toggle
  • secure scope with policy

License

This project is licensed under the MIT License - see the LICENSE file for details.

Libraries

secure_content