Flutter防止截图插件pkb_no_screenshots的使用

Flutter防止截图插件pkb_no_screenshots的使用

Flutter 插件 pkb_no_screenshots 可以在你的应用中启用、禁用或切换截图支持。本指南将展示如何在 iOS 和 Android 平台上使用该插件。

使用

首先,确保你已经在你的项目中添加了 pkb_no_screenshots 插件。你可以在 pubspec.yaml 文件中添加以下依赖:

dependencies:
  pkb_no_screenshots: ^x.x.x

然后运行 flutter pub get 来获取新添加的依赖项。

接下来,我们可以在你的 Flutter 应用程序中添加一些按钮来控制截图功能。

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

void main() => runApp(MyApp());

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  @override
  void initState() {
    super.initState();
  }

  @override
  void dispose() {
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('PKB NO Screenshot'),
        ),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              const Text(
                'ScreenshotIOS',
              ),
              ElevatedButton(
                onPressed: () {
                  DisableScreenshots.disable_enable('');
                },
                child: Text('Disabled'),
              ),

              const Text(
                'ScreenshotAndroid',
              ),
              ElevatedButton(
                child: const Text('Press to turn off screenshot'),
                onPressed: () {
                  DisableScreenshots.disable_enable('D');
                },
              ),
              ElevatedButton(
                child: const Text('Press to turn on screenshot'),
                onPressed: () {
                  DisableScreenshots.disable_enable('E');
                },
              ),
            ],
          ),
        ),
      ),
    );
  }
}

添加原生 iOS 代码

为了在 iOS 上实现截图禁用功能,你需要在 ios/Runner/AppDelegate.swift 中添加一些代码。

import UIKit
import Flutter

let CHANNEL = "disableScreenshots"
[@UIApplicationMain](/user/UIApplicationMain)
[@objc](/user/objc) class AppDelegate: FlutterAppDelegate {
  override func application(
    _ application: UIApplication,
    didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
  ) -> Bool {
    let controller: FlutterViewController = window?.rootViewController as! FlutterViewController
    let channel = FlutterMethodChannel(name: CHANNEL, binaryMessenger: controller.binaryMessenger)
    channel.setMethodCallHandler({
      [weak self] (call: FlutterMethodCall, result: FlutterResult) -> Void in
      if (call.method == "disable") {
        self?.window?.makeSecureDisable()
      }
    })
    GeneratedPluginRegistrant.register(with: self)
    return super.application(application, didFinishLaunchingWithOptions: launchOptions)
  }
}

extension UIWindow {
    func makeSecureDisable() {
        let field = UITextField()
        let view = UIView(frame: CGRect(x: 0, y: 0, width: field.frame.size.width, height: field.frame.size.height))
        field.isSecureTextEntry = true
        self.addSubview(field)
        self.layer.superlayer?.addSublayer(field.layer)
        field.layer.sublayers?.last!.addSublayer(self.layer)
        field.leftView = view
        field.leftViewMode = .always
    }
}

更多关于Flutter防止截图插件pkb_no_screenshots的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

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


pkb_no_screenshots 是一个 Flutter 插件,用于防止应用被截图或录屏。这在一些需要保护用户隐私或敏感信息的应用中非常有用。以下是使用 pkb_no_screenshots 插件的步骤:

1. 添加依赖

首先,在 pubspec.yaml 文件中添加 pkb_no_screenshots 插件的依赖:

dependencies:
  flutter:
    sdk: flutter
  pkb_no_screenshots: ^1.0.0  # 请使用最新版本

然后运行 flutter pub get 来获取依赖。

2. 导入插件

在你的 Dart 文件中导入 pkb_no_screenshots 插件:

import 'package:pkb_no_screenshots/pkb_no_screenshots.dart';

3. 使用插件

你可以在应用的初始化阶段(如 main 函数中)调用 PkbNoScreenshots.initialize() 来启用截图和录屏的阻止功能。

void main() {
  WidgetsFlutterBinding.ensureInitialized();
  
  // 启用防止截图和录屏功能
  PkbNoScreenshots.initialize();
  
  runApp(MyApp());
}

4. 禁用防止截图和录屏

如果你在某些情况下需要允许截图或录屏,可以调用 PkbNoScreenshots.disable() 来禁用该功能:

PkbNoScreenshots.disable();

5. 重新启用防止截图和录屏

你可以随时重新启用防止截图和录屏的功能:

PkbNoScreenshots.enable();

6. 检查当前状态

你可以检查当前是否启用了防止截图和录屏的功能:

bool isEnabled = await PkbNoScreenshots.isEnabled();
print('防止截图和录屏功能是否启用: $isEnabled');

7. 注意事项

  • Android: 在 Android 上,该插件通过设置 WindowManager.LayoutParams.FLAG_SECURE 来阻止截图和录屏。
  • iOS: 在 iOS 上,该插件通过设置 UIScreen.isCaptured 来阻止录屏,但 iOS 不支持阻止截图。

8. 示例代码

以下是一个完整的示例代码:

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

void main() {
  WidgetsFlutterBinding.ensureInitialized();
  
  // 启用防止截图和录屏功能
  PkbNoScreenshots.initialize();
  
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  [@override](/user/override)
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  bool _isEnabled = true;

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

  Future<void> _checkStatus() async {
    bool isEnabled = await PkbNoScreenshots.isEnabled();
    setState(() {
      _isEnabled = isEnabled;
    });
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('防止截图和录屏示例'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text('防止截图和录屏功能是否启用: $_isEnabled'),
            ElevatedButton(
              onPressed: () {
                PkbNoScreenshots.disable();
                _checkStatus();
              },
              child: Text('禁用'),
            ),
            ElevatedButton(
              onPressed: () {
                PkbNoScreenshots.enable();
                _checkStatus();
              },
              child: Text('启用'),
            ),
          ],
        ),
      ),
    );
  }
}
回到顶部