Flutter安全键盘插件flutter_secure_keyboard的使用

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

Flutter安全键盘插件flutter_secure_keyboard的使用

flutter_secure_keyboard 是一个用于防止按键记录攻击和屏幕捕获的安全键盘插件。以下是该插件的基本用法和示例代码。

截图

Alphanumeric Numeric
Alphanumeric Numeric

开始使用

要使用此插件,请在 pubspec.yaml 文件中添加 flutter_secure_keyboard 作为依赖项。例如:

dependencies:
  flutter_secure_keyboard: ^4.0.0

示例代码

以下是一个完整的示例应用程序,展示了如何使用 flutter_secure_keyboard 插件:

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

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

class ExampleApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      home: WithSecureKeyboardExample(),
    );
  }
}

class WithSecureKeyboardExample extends StatefulWidget {
  @override
  _WithSecureKeyboardExampleState createState() => _WithSecureKeyboardExampleState();
}

class _WithSecureKeyboardExampleState extends State<WithSecureKeyboardExample> {
  final _secureKeyboardController = SecureKeyboardController();

  final _passwordEditor = TextEditingController();
  final _passwordTextFieldFocusNode = FocusNode();

  final _pinCodeEditor = TextEditingController();
  final _pinCodeTextFieldFocusNode = FocusNode();

  @override
  Widget build(BuildContext context) {
    // 将 WithSecureKeyboard widget 设置为顶级 widget 以确保安全键盘正常工作。
    return WithSecureKeyboard(
      controller: _secureKeyboardController,
      child: Scaffold(
        appBar: AppBar(
          title: Text('flutter_secure_keyboard'),
        ),
        body: _buildContentView(),
      ),
    );
  }

  Widget _buildContentView() {
    // 建议使用 ListView 防止 widget 溢出。
    return ListView(
      padding: const EdgeInsets.all(8.0),
      children: [
        _buildPasswordTextField(),
        SizedBox(height: 12.0),
        _buildPinCodeTextField(),
      ],
    );
  }

  Widget _buildPasswordTextField() {
    return Column(
      crossAxisAlignment: CrossAxisAlignment.start,
      children: [
        Text('Password'),
        TextFormField(
          controller: _passwordEditor,
          focusNode: _passwordTextFieldFocusNode,
          // 建议设置为 false 以防止软件键盘弹出。
          enableInteractiveSelection: false,
          obscureText: true,
          onTap: () {
            _secureKeyboardController.show(
              type: SecureKeyboardType.ALPHA_NUMERIC,
              focusNode: _passwordTextFieldFocusNode,
              initText: _passwordEditor.text,
              hintText: 'password',
              onCharCodesChanged: (List<int> charCodes) {
                _passwordEditor.text = String.fromCharCodes(charCodes);
              },
            );
          },
        ),
      ],
    );
  }

  Widget _buildPinCodeTextField() {
    return Column(
      crossAxisAlignment: CrossAxisAlignment.start,
      children: [
        Text('PinCode'),
        TextFormField(
          controller: _pinCodeEditor,
          focusNode: _pinCodeTextFieldFocusNode,
          // 建议设置为 false 以防止软件键盘弹出。
          enableInteractiveSelection: false,
          obscureText: true,
          onTap: () {
            _secureKeyboardController.show(
              type: SecureKeyboardType.NUMERIC,
              focusNode: _pinCodeTextFieldFocusNode,
              initText: _pinCodeEditor.text,
              hintText: 'pinCode',
              onDoneKeyPressed: (List<int> charCodes) {
                _pinCodeEditor.text = String.fromCharCodes(charCodes);
              },
            );
          },
        ),
      ],
    );
  }

  @override
  void dispose() {
    super.dispose();
    _secureKeyboardController.dispose();
    _passwordEditor.dispose();
    _pinCodeEditor.dispose();
  }
}

包介绍

WithSecureKeyboard

WithSecureKeyboard 是一个带有控制器实现安全键盘的 widget。

SecureKeyboardController

SecureKeyboardController 是用于检查或控制安全键盘状态的控制器。

参数说明

参数 描述
controller* 控制安全键盘的控制器。
child* 带有安全键盘的子 widget。
keyboardHeight 键盘的高度,默认值是 280.0
keyRadius 键盘键的半径,默认值是 4.0
keySpacing 键盘键之间的间距,默认值是 1.2
keyInputMonitorPadding 键输入监视器的填充,默认值是 const EdgeInsets.only(left: 10.0, right: 5.0)
keyboardPadding 键盘的填充,默认值是 const EdgeInsets.symmetric(horizontal: 5.0)
backgroundColor 键盘的背景颜色,默认值是 const Color(0xFF0A0A0A)
stringKeyColor 字符串键的颜色(字母数字、数字等),默认值是 const Color(0xFF313131)
actionKeyColor 动作键的颜色(shift、backspace、clear 等),默认值是 const Color(0xFF222222)
doneKeyColor 完成键的颜色,默认值是 const Color(0xFF1C7CDC)
activatedKeyColor 当 shift 动作键激活时的键颜色。如果值为 null,则使用 doneKeyColor
keyTextStyle 键盘键内文本的样式,默认值是 const TextStyle(color: Colors.white, fontSize: 17.0, fontWeight: FontWeight.w500)
inputTextStyle 键输入监视器内文本的样式,默认值是 const TextStyle(color: Colors.white, fontSize: 17.0, fontWeight: FontWeight.w500)

SecureKeyboardController

函数 描述
isShowing 是否显示安全键盘。
show 显示安全键盘。
hide 隐藏安全键盘。

SecureKeyboardController.show()

参数 描述
type* 安全键盘的类型。
focusNode 将接收焦点的 FocusNode
initText 输入文本的初始值。
hintText 当输入文本为空时显示的提示文本。
inputTextLengthSymbol 显示输入文本长度时使用的符号。
doneKeyText 完成键的文本。
clearKeyText 清除键的文本。
obscuringCharacter 隐藏输入文本的安全字符,默认值是
maxLength 可输入的最大文本长度。
alwaysCaps 是否始终显示大写字符,默认值是 false
obscureText 是否将输入文本隐藏为安全字符,默认值是 true
shuffleNumericKey 是否打乱数字键的位置,默认值是 true
hideKeyInputMonitor 是否隐藏键输入监视器,默认值是 false
disableKeyBubble 是否禁用键气泡,默认值是 false
onKeyPressed 键被按下时调用。
onCharCodesChanged 字符码改变时调用。
onDoneKeyPressed 完成键被按下时调用。
onCloseKeyPressed 关闭键被按下时调用。

通过以上步骤和示例代码,您可以轻松地在 Flutter 应用中集成 flutter_secure_keyboard 插件,以提高应用的安全性。


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

1 回复

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


当然,以下是一个关于如何在Flutter项目中使用flutter_secure_keyboard插件的示例代码。这个插件提供了一个安全的键盘输入组件,通常用于密码或敏感信息的输入。

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

dependencies:
  flutter:
    sdk: flutter
  flutter_secure_keyboard: ^x.y.z  # 请替换为最新版本号

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

接下来,你可以在你的Flutter应用中使用FlutterSecureKeyboard组件。以下是一个简单的示例代码,展示了如何使用这个插件:

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

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

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

class SecureKeyboardScreen extends StatefulWidget {
  @override
  _SecureKeyboardScreenState createState() => _SecureKeyboardScreenState();
}

class _SecureKeyboardScreenState extends State<SecureKeyboardScreen> {
  final TextEditingController _controller = TextEditingController();
  String _password = '';

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Flutter Secure Keyboard Demo'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            TextField(
              controller: _controller,
              obscureText: true,
              decoration: InputDecoration(
                labelText: 'Password',
              ),
              enabled: false, // 禁用原生键盘
            ),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: () {
                showSecureKeyboard(context, _controller.text, (newText) {
                  setState(() {
                    _password = newText;
                    _controller.value = _controller.value.copyWith(text: newText);
                  });
                });
              },
              child: Text('Show Secure Keyboard'),
            ),
            SizedBox(height: 20),
            Text(
              'Password: $_password',
              style: TextStyle(fontSize: 18),
            ),
          ],
        ),
      ),
    );
  }

  Future<void> showSecureKeyboard(BuildContext context, String initialText, ValueChanged<String> onChanged) async {
    final result = await FlutterSecureKeyboard.showKeyboard(
      context: context,
      initialText: initialText,
      onChanged: onChanged,
      config: FlutterSecureKeyboardConfig(
        // 你可以根据需要自定义键盘配置
        enableDarkMode: false,
        enableEmoji: false,
        keyboardType: TextInputType.text,
        hideSystemKeyboard: true,
      ),
    );

    // 处理返回结果(如果需要)
    if (result != null) {
      // result 是用户输入的新文本
      print('User input: $result');
    }
  }
}

在这个示例中,我们创建了一个简单的Flutter应用,其中包含一个禁用的TextField用于显示密码,以及一个按钮用于显示自定义的安全键盘。当用户点击按钮时,会调用showSecureKeyboard函数,显示自定义的安全键盘,并更新TextField和内部状态_password

注意:

  • FlutterSecureKeyboard.showKeyboard是一个异步函数,它返回一个Future<String?>,表示用户输入的新文本(如果用户取消了输入,则返回null)。
  • 你可以通过FlutterSecureKeyboardConfig类来自定义键盘的各种配置,例如启用/禁用暗模式、表情符号等。

确保你查看flutter_secure_keyboard的最新文档以获取所有可用配置和更新。

回到顶部