Flutter安全屏幕插件flutter_secure_screen的使用

发布于 1周前 作者 songsunli 来自 Flutter

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>

请注意,具体的权限配置可能因插件版本和平台要求而有所不同。务必查阅最新的插件文档以获取准确的配置信息。

回到顶部