Flutter安全键盘插件flutter_secure_keyboard的使用
Flutter安全键盘插件flutter_secure_keyboard的使用
flutter_secure_keyboard
是一个用于防止按键记录攻击和屏幕捕获的安全键盘插件。以下是该插件的基本用法和示例代码。
截图
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
更多关于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
的最新文档以获取所有可用配置和更新。