Flutter安全截屏插件make_secure_screenshoot的使用

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

Flutter安全截屏插件make_secure_screenshoot的使用

插件简介

make_secure_screenshoot 是一个用于阻止屏幕截图和屏幕录制的Flutter插件。通过该插件,开发者可以轻松地在应用中启用或禁用屏幕截图功能,并获取当前的安全状态。

使用方法

1. 禁用屏幕截图

使用 makeSecure() 方法可以禁用屏幕截图。调用此方法后,用户在尝试截屏时将看到黑色屏幕,而不是实际的应用内容。

2. 启用屏幕截图

使用 removeSecure() 方法可以重新启用屏幕截图。调用此方法后,用户可以正常进行屏幕截图。

3. 获取当前安全状态

使用 getSecureStatus() 方法可以获取当前是否启用了屏幕截图保护。返回值为 true 表示已启用保护,false 表示未启用。

完整示例代码

以下是一个完整的示例代码,展示了如何在Flutter应用中使用 make_secure_screenshoot 插件:

import 'package:flutter/material.dart';
import 'dart:async';

import 'package:flutter/services.dart';
import 'package:make_secure_screenshoot/make_secure_screenshoot.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatefulWidget {
  const MyApp({super.key});

  [@override](/user/override)
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  String _platformVersion = 'Unknown';
  bool? _secureStatus;
  final _makeSecureScreenshootPlugin = MakeSecureScreenshoot();

  [@override](/user/override)
  void initState() {
    super.initState();
    initPlatformState();
  }

  // 初始化平台状态
  Future<void> initPlatformState() async {
    String platformVersion;
    try {
      // 获取平台版本信息
      platformVersion = await _makeSecureScreenshootPlugin.getPlatformVersion() ?? 'Unknown platform version';
    } on PlatformException {
      platformVersion = 'Failed to get platform version.';
    }

    if (!mounted) return;

    setState(() => _platformVersion = platformVersion);
  }

  // 获取当前的安全状态
  Future<void> getSecureStatus() async {
    bool? status;
    try {
      status = await _makeSecureScreenshootPlugin.getSecureStatus();
      setState(() => _secureStatus = status);
    } on PlatformException {
      status = null;
    }
  }

  // 禁用屏幕截图
  Future<void> makeSecure() async {
    var result = await _makeSecureScreenshootPlugin.makeSecure();
    setState(() => _secureStatus = result);
    // 可选:刷新状态
    // getSecureStatus();
  }

  // 启用屏幕截图
  Future<void> removeSecure() async {
    await _makeSecureScreenshootPlugin.removeSecure();
    getSecureStatus();
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Make Secure Screenshoot'),
        ),
        body: Container(
          padding: const EdgeInsets.all(16.0),
          child: Column(
            crossAxisAlignment: CrossAxisAlignment.center,
            mainAxisAlignment: MainAxisAlignment.spaceAround,
            children: [
              Column(
                crossAxisAlignment: CrossAxisAlignment.center,
                children: [
                  // 显示当前的安全状态
                  Text('Current status: $_secureStatus\n', style: const TextStyle(fontSize: 16)),
                  ElevatedButton(onPressed: () => getSecureStatus(), child: const Text("Refresh")),
                  const SizedBox(height: 16.0),
                  Builder(builder: (context) {
                    if (_secureStatus ?? false) {
                      return const Text(
                        "如果尝试截屏或录制屏幕,您将看到黑色屏幕",
                        textAlign: TextAlign.center,
                      );
                    } else {
                      return const Text(
                        "安全屏幕未启用,您可以正常截屏",
                        textAlign: TextAlign.center,
                      );
                    }
                  })
                ],
              ),
              const Divider(),
              Row(
                mainAxisAlignment: MainAxisAlignment.spaceAround,
                children: [
                  // 禁用屏幕截图按钮
                  ElevatedButton(onPressed: () => makeSecure(), child: const Text("启用安全模式")),
                  // 启用屏幕截图按钮
                  ElevatedButton(onPressed: () => removeSecure(), child: const Text("取消安全模式")),
                ],
              ),
              Text('Running on: $_platformVersion\n'),
            ],
          ),
        ),
      ),
    );
  }
}

更多关于Flutter安全截屏插件make_secure_screenshoot的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter安全截屏插件make_secure_screenshoot的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是如何在Flutter项目中使用make_secure_screenshoot插件来保护屏幕截图的一个代码示例。这个插件通过禁用或启用设备的屏幕截图功能来增加应用的安全性。

首先,你需要在pubspec.yaml文件中添加make_secure_screenshoot依赖:

dependencies:
  flutter:
    sdk: flutter
  make_secure_screenshoot: ^最新版本号 # 请替换为最新的版本号

然后,运行flutter pub get来安装依赖。

接下来,在你的Flutter项目中,你可以使用MakeSecureScreenshoot类来控制屏幕截图功能。以下是一个简单的示例,展示了如何在一个Flutter应用中启用和禁用屏幕截图:

import 'package:flutter/material.dart';
import 'package:make_secure_screenshoot/make_secure_screenshoot.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Secure Screenshot Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: SecureScreenshotDemo(),
    );
  }
}

class SecureScreenshotDemo extends StatefulWidget {
  @override
  _SecureScreenshotDemoState createState() => _SecureScreenshotDemoState();
}

class _SecureScreenshotDemoState extends State<SecureScreenshotDemo> {
  bool isScreenshotProtected = false;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Secure Screenshot Demo'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(
              'Screenshot Protection is ${isScreenshotProtected ? "ON" : "OFF"}',
              style: TextStyle(fontSize: 24),
            ),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: () async {
                setState(() {
                  isScreenshotProtected = !isScreenshotProtected;
                });

                if (isScreenshotProtected) {
                  await MakeSecureScreenshoot.preventScreenshot();
                } else {
                  await MakeSecureScreenshoot.allowScreenshot();
                }
              },
              child: Text('Toggle Screenshot Protection'),
            ),
          ],
        ),
      ),
    );
  }
}

在这个示例中,我们创建了一个简单的Flutter应用,其中包含一个按钮来切换屏幕截图保护状态。当用户点击按钮时,应用会调用MakeSecureScreenshoot.preventScreenshot()来禁用屏幕截图功能,或者调用MakeSecureScreenshoot.allowScreenshot()来启用屏幕截图功能。

请注意,这个插件的实现依赖于平台特定的API,因此在Android和iOS上可能会有不同的行为。此外,由于操作系统的限制,某些设备上可能无法完全禁用屏幕截图功能。因此,在实际应用中,建议结合其他安全措施(如敏感信息模糊处理、加密等)来增强应用的安全性。

确保在发布应用前,在不同的设备和操作系统版本上进行充分的测试,以确保屏幕截图保护功能的可靠性和兼容性。

回到顶部