Flutter安全屏幕插件flutter_secure_screen的使用
Flutter安全屏幕插件flutter_secure_screen的使用
提供iOS截屏录屏监控、禁用Android设备的截屏录屏。实现过程参考了disable_screenshots。
开始使用
添加依赖
在 pubspec.yaml
文件中添加以下依赖:
dependencies:
flutter_secure_screen: 0.0.1 # 最新版本
功能演示
完整示例代码
以下是完整的示例代码,展示了如何使用 flutter_secure_screen
插件来监控和控制屏幕截屏和录屏操作。
import 'dart:async';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter_secure_screen/flutter_secure_screen.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatefulWidget {
[@override](/user/override)
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
initialRoute: '/',
home: HomeDemo(),
);
}
}
class HomeDemo extends StatefulWidget {
const HomeDemo({Key? key}) : super(key: key);
[@override](/user/override)
_HomeDemoState createState() => _HomeDemoState();
}
class _HomeDemoState extends State<HomeDemo> {
/// 录屏动作 暂只支持iOS
StreamSubscription<void>? _screenRecordListen;
/// 截屏动作 暂只支持iOS
StreamSubscription<void>? _screenShotsListen;
String _platformStateText = '未知设备';
String _secureState = '允许截屏录屏';
[@override](/user/override)
void initState() {
super.initState();
_screenRecordListen =
FlutterSecureScreen.singleton.onScreenRecord?.listen(_onScreenRecord);
_screenShotsListen =
FlutterSecureScreen.singleton.onScreenShots?.listen(_onScreenShots);
if (defaultTargetPlatform == TargetPlatform.android) {
_platformStateText = '当前为Android设备';
} else if (defaultTargetPlatform == TargetPlatform.iOS) {
_platformStateText = '当前为iOS设备';
}
}
[@override](/user/override)
void dispose() {
_screenRecordListen?.cancel();
_screenShotsListen?.cancel();
super.dispose();
}
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('FlutterSecureScreen'),
),
body: Center(
child: Column(
children: [
const Spacer(),
Text('$_platformStateText : $_secureState'),
const Spacer(),
Text('请试着用手机截屏或录屏\n(有对应提示则代表检测成功)'),
const Spacer(),
Visibility(
visible: defaultTargetPlatform == TargetPlatform.android,
child: Expanded(
child: TextButton(
onPressed: () async {
await FlutterSecureScreen.singleton
.setAndroidScreenSecure(true);
setState(() {
_secureState = '禁止截屏录屏';
});
},
child: Text('禁用Android录屏截屏'),
),
),
),
Visibility(
visible: defaultTargetPlatform == TargetPlatform.android,
child: Expanded(
child: TextButton(
onPressed: () async {
FlutterSecureScreen.singleton.setAndroidScreenSecure(false);
setState(() {
_secureState = '允许截屏录屏';
});
},
child: Text('允许Android录屏截屏')),
),
),
const Spacer(),
],
),
),
);
}
void _onScreenRecord(dynamic event) {
showModalBottomSheet(
context: context,
builder: (_) => Container(
height: 200, child: Center(child: Text('检测到手机在录屏 $event'))));
}
void _onScreenShots(dynamic event) {
showModalBottomSheet(
context: context,
builder: (_) => Container(
height: 200, child: Center(child: Text('检测到手机在截屏 $event'))));
}
}
更多关于Flutter安全屏幕插件flutter_secure_screen的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
1 回复
更多关于Flutter安全屏幕插件flutter_secure_screen的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是如何在Flutter项目中使用flutter_secure_screen
插件的一个示例。这个插件主要用于防止屏幕截图和录屏,从而提高应用的安全性。
1. 添加依赖
首先,在你的pubspec.yaml
文件中添加flutter_secure_screen
依赖:
dependencies:
flutter:
sdk: flutter
flutter_secure_screen: ^x.y.z # 请替换为最新版本号
然后运行flutter pub get
来获取依赖。
2. 导入包
在你的Dart文件中导入flutter_secure_screen
包:
import 'package:flutter_secure_screen/flutter_secure_screen.dart';
3. 使用插件
下面是一个简单的示例,展示如何在需要保护的屏幕上启用防截图功能。
import 'package:flutter/material.dart';
import 'package:flutter_secure_screen/flutter_secure_screen.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: SecureScreenWrapper(
child: MyHomePage(),
// 配置防截图和防录屏的选项
enableSecureOverlay: true, // 启用防截图覆盖层
preventScreenshots: true, // 防止截图
preventScreenRecording: true, // 防止录屏
),
);
}
}
class MyHomePage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Flutter Secure Screen Example'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(
'This screen is protected against screenshots and screen recordings.',
style: TextStyle(fontSize: 24),
),
SizedBox(height: 20),
ElevatedButton(
onPressed: () {
// 导航到其他不受保护的屏幕(如果需要)
// Navigator.push(context, MaterialPageRoute(builder: (context) => OtherScreen()));
},
child: Text('Go to Other Screen'),
),
],
),
),
);
}
}
4. 注意事项
- 权限请求:在某些平台上(特别是Android),可能需要额外的权限来完全实现防录屏功能。请确保在
AndroidManifest.xml
中请求必要的权限。 - 用户体验:启用防截图和防录屏功能可能会影响用户体验,特别是在调试和测试阶段。因此,建议在发布前充分测试。
- 兼容性:不是所有设备和操作系统版本都支持这些功能。请确保在目标平台上进行充分的测试。
5. 权限配置(Android示例)
在AndroidManifest.xml
中添加以下权限(如果需要):
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.yourapp">
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<!-- 其他必要的权限 -->
<application
... >
<!-- 你的应用配置 -->
</application>
</manifest>
请注意,具体的权限配置可能因插件版本和平台要求而有所不同。务必查阅最新的插件文档以获取准确的配置信息。