Flutter如何防止录屏

在Flutter开发中,如何有效防止用户录屏或截图?特别是在涉及敏感信息的页面时,是否有成熟的插件或原生代码方案可以实现这个功能?希望能兼顾Android和iOS平台的兼容性。

2 回复

Flutter中可通过SecureScreen插件或原生代码设置FLAG_SECURE来防止录屏和截图。适用于敏感信息保护。

更多关于Flutter如何防止录屏的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在Flutter中,可以通过以下方法防止录屏和截屏:

1. Android端实现

android/app/src/main/AndroidManifest.xml 中添加:

<activity
    android:name=".MainActivity"
    android:launchMode="singleTop"
    android:theme="@style/LaunchTheme"
    android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
    android:hardwareAccelerated="true"
    android:windowSoftInputMode="adjustResize"
    android:screenOrientation="portrait"
    android:exported="true">
    
    <!-- 防止录屏和截屏 -->
    <meta-data
        android:name="android.app.uses_flags"
        android:value="FLAG_SECURE" />
</activity>

2. iOS端实现

ios/Runner/Info.plist 中添加:

<key>UIApplicationExitsOnSuspend</key>
<true/>

3. Flutter端代码控制

创建安全页面组件:

import 'package:flutter/services.dart';

class SecureScreen extends StatefulWidget {
  final Widget child;
  
  const SecureScreen({Key? key, required this.child}) : super(key: key);
  
  @override
  _SecureScreenState createState() => _SecureScreenState();
}

class _SecureScreenState extends State<SecureScreen> with WidgetsBindingObserver {
  
  @override
  void initState() {
    super.initState();
    WidgetsBinding.instance.addObserver(this);
    _enableSecureScreen();
  }
  
  @override
  void dispose() {
    WidgetsBinding.instance.removeObserver(this);
    _disableSecureScreen();
    super.dispose();
  }
  
  @override
  void didChangeAppLifecycleState(AppLifecycleState state) {
    if (state == AppLifecycleState.resumed) {
      _enableSecureScreen();
    } else {
      _disableSecureScreen();
    }
  }
  
  void _enableSecureScreen() {
    SystemChrome.setEnabledSystemUIMode(SystemUiMode.immersiveSticky);
    SystemChrome.setPreferredOrientations([
      DeviceOrientation.portraitUp,
      DeviceOrientation.portraitDown,
    ]);
  }
  
  void _disableSecureScreen() {
    SystemChrome.setEnabledSystemUIMode(SystemUiMode.edgeToEdge);
    SystemChrome.setPreferredOrientations(DeviceOrientation.values);
  }
  
  @override
  Widget build(BuildContext context) {
    return widget.child;
  }
}

使用方式:

SecureScreen(
  child: YourSensitiveContentWidget(),
)

注意事项:

  • 这些方法可以增加安全性,但不能完全阻止专业录屏工具
  • 在需要保护敏感信息的页面使用
  • 测试时记得在Android和iOS设备上分别验证效果

这些措施可以有效防止大多数普通用户的录屏和截屏行为。

回到顶部