Blocco screenshot su Flutter

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_SECURE nella MainActivity per 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à isSecure sulla 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_SECURE via 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 SharedPreferences nativo, 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:

    Ti potrebbe interessare

    Articoli correlati