secure_content 2.0.0-beta.1
secure_content: ^2.0.0-beta.1 copied to clipboard
Protect Flutter screens with screenshot/recording shielding, biometric re-auth, inactivity lock, integrity checks, risk watermarks, and secure clipboard controls.
Secure Content
Protect sensitive Flutter UI from screenshots, recording visibility, app switcher previews, and runtime risk states on Android and iOS.
Screenshots #
Android - Screen recording demo
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:
screenshotCapturedrecordingStarted/recordingStoppedbiometricAuthSucceeded/biometricAuthFailed/biometricUnavailableintegritySafe/integrityRiskDetectedclipboardSet/clipboardClearedidleLockActivated/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.