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设备上分别验证效果
这些措施可以有效防止大多数普通用户的录屏和截屏行为。

