搜索插件、代码仓与 APP 分类

插件详情v0.2.0

disable_screenshots

提供三个禁用截屏的相关功能。分别是:截屏监控、全局添加水印、禁用截屏(仅支持Android)。

AndroidiOS
近 30 天下载
61
喜欢数
33
Pub 分数
115

安装插件

flutter pub add disable_screenshots

插件介绍

基于插件公开信息、社区数据与项目使用情况整理的选型参考。

disable_screenshots 包提供了三个函数,通过防止未经授权的截图来增强应用安全性。它支持截图监控以检测是否已截屏,允许添加全局水印以阻止分享,并在 Android 设备上禁用截图功能。虽然列出了对 iOS 的支持,但实际禁用截图的功能仅限于 Android。该包可通过 Flutter Pub 轻松集成,适用于处理敏感内容的应用程序。其功能旨在高安全场景中保护用户隐私和数据完整性。

适合场景

  • 保护敏感的应用内容
  • 保护金融或医疗保健应用程序
  • 防止未经授权的屏幕共享
  • 增强数字版权管理
  • 监控截图尝试

主要特点

  • 截图监控
  • 全局水印叠加
  • 仅限 Android 的截图禁用
  • Flutter 的简单集成
  • 注重隐私的设计

适合对象

  • 包含机密数据的应用程序
  • 带有版权材料的教育平台
  • 安全的银行或企业应用
  • 数字媒体的内容保护
  • 注重用户隐私的开发团队

使用建议

  • 无 iOS 截图禁用功能
  • 水印可能影响UI美观
  • 需要 Android 特定权限
  • 仅限 Android 平台以实现完整的截图阻止
  • 如果过度使用,可能会影响用户体验

原始 README

以下为关联源码仓库的 README 原文快照,最新内容请访问源码仓库。

disable_screenshots

在Flutter开发中,有时我们需要对App的内容进行管控,避免敏感信息暴露,所以开发了这个插件。此插件提供三个禁用截屏的相关功能,分别是:截屏监控行为、全局添加水印、禁用截屏(仅支持Android)。

Getting Started

Add dependency
dependencies:
  disable_screenshots: 0.0.1 #latest version
功能演示

demo_gif

使用样例
class RootApp extends StatefulWidget {
  @override
  _RootAppState createState() => _RootAppState();
}

class _RootAppState extends State<RootApp> {
  // 初始化插件
  DisableScreenshots _plugin = DisableScreenshots();
  // 监控截屏行为的stream
  StreamSubscription<void> _screenshotsSubscription;
  int _screenshotsCount = 0;
  bool _disableScreenshots = false;

  @override
  void initState() {
    super.initState();
    _screenshotsSubscription = _plugin.onScreenShots.listen((event) {
      // 监控到截屏行为会回调到这里
      setState(() {
        _screenshotsCount++;
      });
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('禁止截屏'),
      ),
      body: Column(
        children: <Widget>[
          Center(
            child: Text("监控到截屏次数:$_screenshotsCount"),
          ),
          Center(
            child: Text(_disableScreenshots ? "禁止截屏状态" : "允许截屏状态"),
          ),
          RaisedButton(
              onPressed: () {
                // 添加默认样式的水印
                _plugin.addWatermark(context, "默认水印",
                    rowCount: 4, columnCount: 8);
              },
              child: Text("添加默认水印")),
          RaisedButton(
              onPressed: () {
                // 添加自定义widget当做水印
                _plugin.addCustomWatermark(context,
                    Watarmark(rowCount: 3, columnCount: 10, text: "自定义水印"));
              },
              child: Text("添加自定义水印")),
          RaisedButton(
              onPressed: () {
                // 移除水印
                _plugin.removeWatermark();
              },
              child: Text("删除水印")),
          RaisedButton(
              onPressed: () async {
                bool flag = !_disableScreenshots;
                // 禁用或允许截屏(只支持iOS)
                await _plugin.disableScreenshots(flag);
                setState(() {
                  _disableScreenshots = flag;
                });
              },
              child: Text(_disableScreenshots ? "允许截屏(仅android适用)" : "禁用截屏(仅android适用)")),
          RaisedButton(
              onPressed: () {
                Navigator.of(context).push(MaterialPageRoute(
                    builder: (_) => Scaffold(
                          appBar: AppBar(
                            title: Text("我是新页面"),
                          ),
                          body: Center(child: Text("new page")),
                        )));
              },
              child: Text("进入新页面"))
        ],
      ),
    );
  }

  @override
  void dispose() {
    super.dispose();
    //取消截屏监控可以调用cancel()方法
    if (_screenshotsSubscription != null) {
      _screenshotsSubscription.cancel();
    }
  }
}
已知问题
  1. 在老的flutter项目中,在iOS平台运行可能出现编译问题无法运行。这个是由于老的flutter项目里面没有使用到swift,所以没有briging文件,但是插件使用了swift,所以会编译失败,这种情况直接使用xcode在iOS项目中创建一个swift文件,会自动生成briding文件。
  2. 在某些安卓设备上(华为P30、Mi 10、三星Note10、OPPO reno3 Pro等),存在不能捕获截屏事件的问题,如果大家有解决方案,请提交pull request,谢谢!
其它

此Plugin的创建流程,可以参考博文如何创建一个Flutter Plugin

所属分类

源码仓库

使用此插件的项目

暂无相关数据。