flutter如何禁止截屏
在Flutter应用中如何禁止用户截屏或录屏?我尝试了一些方法但效果不理想,希望有经验的朋友能分享一下在Android和iOS平台上实现禁止截屏的最佳实践,包括是否需要使用原生代码以及具体如何实现。
2 回复
在Flutter中,可以通过flutter_windowmanager插件禁止截屏。调用addFlags方法,传入WindowManager.LayoutParams.FLAG_SECURE即可。适用于Android和iOS。
更多关于flutter如何禁止截屏的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
在 Flutter 中,可以通过原生代码(Android 和 iOS)实现禁止截屏功能。以下是具体方法:
Android 端配置
- 修改
android/app/src/main/AndroidManifest.xml,在 Activity 标签中添加:
android:flags="FLAG_SECURE"
示例:
<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:flags="FLAG_SECURE">
iOS 端配置
在 ios/Runner/AppDelegate.swift 的 application 方法中添加:
window.makeSecure()
并扩展 UIWindow:
extension UIWindow {
open override func makeSecure() -> UIWindow {
let field = UITextField()
field.isSecureTextEntry = true
self.addSubview(field)
field.centerYAnchor.constraint(equalTo: self.centerYAnchor).isActive = true
field.centerXAnchor.constraint(equalTo: self.centerXAnchor).isActive = true
self.layer.superlayer?.addSublayer(field.layer)
field.layer.sublayers?.first?.addSublayer(self.layer)
return self
}
}
注意事项
- Android 的配置会阻止截屏和录屏,iOS 的方法主要防止截屏时预览内容泄露。
- 此功能需分别配置原生代码,Flutter 层无直接封装方法。
完成后重新编译应用即可生效。

