Blocco screenshot su Flutter
Blocco screenshot su Flutter
Bloccare gli screenshot in un’app Flutter serve a proteggere dati sensibili (es. credenziali, documenti, contenuti DRM) da catture non autorizzate. Esistono varie modalità: implementazioni manuali con codice nativo su Android e iOS, plugin di terze parti come flutter_windowmanager, anti_screenshot, screen_protector e – appunto – no_screenshot. Quest’ultimo offre un’interfaccia semplice per abilitare/disabilitare il blocco e ascoltare eventi di screenshot, ma è limitato a Android e iOS. Nell’articolo forniamo esempi pratici e un’analisi delle possibilità su Web e Desktop.
Perché bloccare gli screenshot
Bloccare la cattura dello schermo è fondamentale quando l’app tratta dati sensibili o protetti da licenze, come informazioni bancarie, documenti personali o flussi video protetti. Senza questo meccanismo, un utente malintenzionato potrebbe creare copie non autorizzate, violando la privacy o il copyright dei contenuti visualizzati.
Le modalità possibili sul mercato – Blocco screenshot su Flutter
1. Flag nativo Android / iOS
- Android: impostare
FLAG_SECUREnellaMainActivityper prevenire screenshot e registrazioni .import android.os.Bundle import android.view.WindowManager import io.flutter.embedding.android.FlutterActivity class MainActivity: FlutterActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) window.setFlags( WindowManager.LayoutParams.FLAG_SECURE, WindowManager.LayoutParams.FLAG_SECURE ) } } - iOS: abilitare la proprietà
isSecuresulla finestra nell’AppDelegate.import UIKit import Flutter @UIApplicationMain @objc class AppDelegate: FlutterAppDelegate { override func application( _ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? ) -> Bool { GeneratedPluginRegistrant.register(with: self) window?.isSecure = true return super.application(application, didFinishLaunchingWithOptions: launchOptions) } }
2. Plugin Flutter generici
- flutter_windowmanager: imposta
FLAG_SECUREvia Dart per Android (iOS richiede ancora codice nativo) . - anti_screenshot: offre tre modalità di protezione su Android/iOS, con API simile a
no_screenshot. - screen_protector: previene screenshot e leak in background su entrambe le piattaforme .
3. Soluzioni manuali avanzate
- Creazione di canali piattaforma per integrare logica custom su Android e iOS, ad esempio tramite
MethodChannel. - Utilizzo di overlay di sicurezza su iOS per coprire il contenuto durante la registrazione in background.
Focus sul package no_screenshot
Il package no_screenshot è un plugin Flutter che consente di abilitare, disabilitare e ascoltare eventi di screenshot/screen recording, senza dover toccare codice nativo.
Caratteristiche principali
- Disabilita e riabilita screenshot e registrazione su Android e iOS.
- Fornisce uno stream per intercettare azioni di screenshot.
- Persistenza automatica dello stato grazie a
SharedPreferencesnativo, senza dover gestire manualmente il lifecycle .
Come implementarlo nel progetto – Blocco screenshot su Flutter
1. Aggiungere la dipendenza
Nel file pubspec.yaml:
dependencies:
flutter:
sdk: flutter
no_screenshot: ^<ultima_versione>
Eseguire flutter pub get .
2. Importare e inizializzare
import 'package:no_screenshot/no_screenshot.dart';
final _noScreenshot = NoScreenshot.instance;
3. Disabilitare gli screenshot
void disableScreenshot() async {
bool success = await _noScreenshot.screenshotOff();
debugPrint('Screenshot Off: $success');
}
4. Riabilitare gli screenshot
void enableScreenshot() async {
bool success = await _noScreenshot.screenshotOn();
debugPrint('Screenshot On: $success');
}
5. Ascoltare gli eventi
_noScreenshot.screenshotStream.listen((event) {
// event == true quando è stato catturato uno screenshot
debugPrint('Screenshot catturato!');
});
Supporto per Web e Desktop – Blocco screenshot su Flutter
Al momento no_screenshot è limitato a Android e iOS e non offre API per Web o Desktop . Per implementazioni su web si potrebbero considerare librerie JavaScript che oscurano contenuti sensibili o disabilitano il tasto destro, ma non esistono flag nativi in browser. Su desktop, occorre ricorrere a soluzioni native diverse per Windows/macOS (simili a FLAG_SECURE), ma non esistono plugin Flutter ufficiali stabili al momento.
Conclusioni – Blocco screenshot su Flutter
Bloccare gli screenshot in Flutter è un passaggio essenziale per la sicurezza di app che gestiscono dati sensibili. Sebbene si possano scrivere soluzioni native, l’utilizzo di plugin come no_screenshot semplifica enormemente il processo su Android e iOS. Per Web e Desktop occorre invece esplorare workaround personalizzati, perché non esistono API unificate in Flutter.
(fonte) (fonte) (fonte) (fonte)
Innovaformazione, scuola informatica specialistica promuove lo sviluppo con Flutter in maniera consapevole e supporta le aziende IT nella formazione dei team di sviluppatori. Nell’offerta formativa trovate il Corso Flutter.
Per altri articoli tecnici consigliamo di navigare sul nostro blog QUI.
INFO: info@innovaformazione.net – tel. 3471012275 (Dario Carrassi)
Vuoi essere ricontattato? Lasciaci il tuo numero telefonico e la tua email, ti richiameremo nelle 24h:
Articoli correlati
Guida SAP Clean ABAP
Lavoro Contabilità Bilancio Roma
Sviluppo API REST con ASP.NET Core
Come integrare l’AI negli ATM bancomat
Guida Android XR SDK
