Flutter一次性密码输入插件otp_pin_field_fork的使用
Flutter一次性密码输入插件otp_pin_field_fork的使用
简介
otp_pin_field_fork
是一个用于生成一次性密码输入框的 Flutter 包。它提供了美观的设计和动画效果,是一个高度可定制化的 Flutter 小部件,用于输入一次性密码。
创建者:Shivam Mishra
联系方式:@shivbo96
支持作者:
- Buy Me A Coffee
- PayPal: Donate via PayPal
使用方法
1. 添加依赖
在项目的 pubspec.yaml
文件中添加以下依赖:
dependencies:
otp_pin_field_fork: ^版本号
然后运行以下命令安装依赖:
$ flutter packages get
或者使用 IDE 的自动获取功能。
2. 导入包
在 Dart 文件中导入以下内容:
import 'package:otp_pin_field_fork/otp_pin_field.dart';
属性说明
以下是 OtpPinField
的主要属性及其描述:
名称 | 类型 | 默认值 | 描述 |
---|---|---|---|
fieldCount |
int | 4 | 一次性密码的长度及输入框的数量。 |
highlightBorder |
bool | true | 是否高亮当前聚焦的输入框。 |
activeFieldBorderColor |
Color | Colors.black | 当前聚焦输入框的边框颜色。 |
activeFieldBackgroundColor |
Color | Colors.transparent | 当前聚焦输入框的背景颜色。 |
defaultFieldBorderColor |
Color | Colors.black45 | 未聚焦输入框的边框颜色。 |
defaultFieldBackgroundColor |
Color | Colors.transparent | 未聚焦输入框的背景颜色。 |
fieldPadding |
double | 20.0 | 输入框之间的间距。 |
fieldBorderRadius |
double | 2.0 | 输入框的圆角半径。 |
fieldBorderWidth |
double | 2.0 | 输入框的边框宽度。 |
textStyle |
TextStyle | 默认样式 | 输入框内字符的样式。 |
otpPinFieldInputType |
OtpPinFieldInputType | OtpPinFieldInputType.none | 输入框显示类型(无、密码或自定义字符)。 |
otpPinInputCustom |
String | “*” | 自定义字符,仅当 otpPinFieldInputType 设置为 custom 时生效。 |
onSubmit |
void Function(String) | 无 | 当输入框达到最大长度时触发的回调函数。 |
onChange |
void Function(String) | 无 | 输入框内容发生变化时触发的回调函数。 |
otpPinFieldStyle |
OtpPinFieldStyle | 默认样式 | 单个输入框的自定义样式。 |
fieldHeight |
double | 45.0 | 输入框的高度。 |
fieldWidth |
double | 70.0 | 输入框的宽度。 |
otpPinFieldDecoration |
OtpPinFieldDecoration | 默认装饰 | 输入框的预设装饰样式(如圆角、边框等)。 |
keyboardType |
TextInputType | TextInputType.number | 键盘类型。 |
autofocus |
bool | false | 是否自动聚焦。 |
cursorColor |
Color | Colors.black | 光标的颜色。 |
cursorWidth |
double | 2.0 | 光标的宽度。 |
showCursor |
bool | true | 是否显示光标。 |
mainAxisAlignment |
MainAxisAlignment | MainAxisAlignment.center | 控制输入框的布局方式。 |
upperChild |
Widget | Container() | 显示在输入框上方的组件(仅在启用自定义键盘时有效)。 |
middleChild |
Widget | Container() | 显示在输入框与自定义键盘之间的组件(仅在启用自定义键盘时有效)。 |
showCustomKeyboard |
bool | false | 是否显示自定义键盘。 |
customKeyboard |
Widget | 无 | 自定义键盘组件。 |
showDefaultKeyboard |
bool | true | 是否显示默认键盘。 |
autoFillEnable |
bool | false | 是否启用自动填充功能(Android 需要此选项)。 |
smsRegex |
String | \d{0,4} |
用于解析短信验证码的正则表达式。 |
phoneNumbersHint |
bool | false | 是否启用系统电话号码自动填充功能(仅限 Android)。 |
textInputAction |
TextInputAction | TextInputAction.done | 键盘的操作按钮类型。 |
filledFieldBackgroundColor |
Color | Colors.transparent | 已填写输入框的背景颜色。 |
filledFieldBorderColor |
Color | Colors.transparent | 已填写输入框的边框颜色。 |
activeFieldBorderGradient |
Gradient | 无 | 当前聚焦输入框的渐变边框颜色。 |
filledFieldBorderGradient |
Gradient | 无 | 已填写输入框的渐变边框颜色。 |
defaultFieldBorderGradient |
Gradient | 无 | 未聚焦输入框的渐变边框颜色。 |
onPhoneHintSelected |
Function(String) | 无 | 当用户选择自动填充的手机号时触发的回调函数。 |
beforeTextPaste |
bool Function(String?)? | null | 在粘贴文本之前执行的回调函数。 |
showHintText |
bool | false | 是否显示输入框提示文字。 |
hintTextColor |
Color | Colors.black45 | 提示文字的颜色。 |
hintText |
String | “0” | 提示文字的具体内容。 |
示例代码
以下是一个完整的示例代码,展示了如何使用 otp_pin_field_fork
:
import 'package:flutter/material.dart';
import 'package:otp_pin_field_fork/otp_pin_field.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'OTP Pin Field Example',
theme: ThemeData(primarySwatch: Colors.blue),
home: const MyHomePage(),
);
}
}
class MyHomePage extends StatefulWidget {
const MyHomePage({super.key});
@override
State<MyHomePage> createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
final _otpPinFieldController = GlobalKey<OtpPinFieldState>();
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: const Text('OTP Pin Field Example')),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
OtpPinField(
key: _otpPinFieldController,
maxLength: 4,
showCursor: true,
cursorColor: Colors.indigo,
cursorWidth: 3,
otpPinFieldStyle: const OtpPinFieldStyle(
showHintText: true,
activeFieldBorderGradient: LinearGradient(
colors: [Colors.black, Colors.redAccent],
),
filledFieldBorderGradient: LinearGradient(
colors: [Colors.green, Colors.tealAccent],
),
defaultFieldBorderGradient: LinearGradient(
colors: [Colors.orange, Colors.brown],
),
fieldBorderWidth: 3,
),
upperChild: const Column(
children: [
SizedBox(height: 30),
Icon(Icons.flutter_dash_outlined, size: 150),
SizedBox(height: 20),
],
),
middleChild: Column(
children: [
const SizedBox(height: 30),
ElevatedButton(
onPressed: () {
_otpPinFieldController.currentState?.clearOtp();
},
child: const Text('Clear OTP'),
),
const SizedBox(height: 10),
ElevatedButton(
onPressed: () => Navigator.push(
context,
MaterialPageRoute(builder: (_) => const NextPage()),
),
child: const Text('Next Page'),
),
const SizedBox(height: 30),
],
),
onSubmit: (text) {
debugPrint('Entered pin is $text');
},
onChange: (text) {
debugPrint('Change pin is $text');
},
otpPinFieldDecoration: OtpPinFieldDecoration.defaultPinBoxDecoration,
),
],
),
),
);
}
}
Android SMS 约束
为了确保短信验证码能够被正确接收,需要满足以下条件:
- 短信内容不得超过 140 字节。
- 必须包含一次性验证码,并将其发送回服务器以完成验证流程。
- 结尾必须附加一个 11 位的哈希字符串,用于标识应用。
例如:
8125 是你的验证码 Ov114rXIhwf (Ov114rXIhwf 是你的哈希值,请在日志中搜索并添加到短信中)
更多关于Flutter一次性密码输入插件otp_pin_field_fork的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter一次性密码输入插件otp_pin_field_fork的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
otp_pin_field_fork
是一个 Flutter 插件,用于实现一次性密码(OTP)输入框。它允许用户输入固定长度的数字或字母代码,通常用于验证码、一次性密码等场景。以下是如何在 Flutter 项目中使用 otp_pin_field_fork
插件的步骤。
1. 添加依赖
首先,在 pubspec.yaml
文件中添加 otp_pin_field_fork
插件的依赖:
dependencies:
flutter:
sdk: flutter
otp_pin_field_fork: ^1.0.0 # 请检查最新版本
然后运行 flutter pub get
来安装依赖。
2. 导入插件
在需要使用 OTP 输入框的 Dart 文件中导入插件:
import 'package:otp_pin_field_fork/otp_pin_field_fork.dart';
3. 使用 OTP 输入框
在 build
方法中使用 OtpPinField
组件来创建 OTP 输入框。以下是一个简单的示例:
class OtpInputScreen extends StatefulWidget {
[@override](/user/override)
_OtpInputScreenState createState() => _OtpInputScreenState();
}
class _OtpInputScreenState extends State<OtpInputScreen> {
final _otpController = TextEditingController();
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('OTP Input'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
OtpPinField(
controller: _otpController,
length: 6, // OTP 的长度
onChanged: (value) {
print('Current OTP: $value');
},
onCompleted: (value) {
print('Completed OTP: $value');
},
fieldWidth: 40.0, // 每个输入框的宽度
fieldHeight: 50.0, // 每个输入框的高度
borderRadius: BorderRadius.circular(10.0), // 输入框的圆角
textStyle: TextStyle(fontSize: 20.0), // 文本样式
activeColor: Colors.blue, // 激活状态下的边框颜色
inactiveColor: Colors.grey, // 未激活状态下的边框颜色
selectedColor: Colors.green, // 选中状态下的边框颜色
),
SizedBox(height: 20.0),
ElevatedButton(
onPressed: () {
// 获取输入的 OTP
String otp = _otpController.text;
print('Submitted OTP: $otp');
},
child: Text('Submit'),
),
],
),
),
);
}
}
4. 运行项目
保存文件并运行项目,你应该会看到一个 OTP 输入框。用户可以输入 6 位数字,输入完成后会触发 onCompleted
回调。
5. 自定义选项
OtpPinField
提供了多种自定义选项,例如:
length
: OTP 的长度。fieldWidth
和fieldHeight
: 每个输入框的宽度和高度。borderRadius
: 输入框的圆角。textStyle
: 输入框中的文本样式。activeColor
,inactiveColor
,selectedColor
: 不同状态下的边框颜色。
你可以根据项目需求调整这些参数。
6. 处理 OTP 输入
在 onCompleted
回调中,你可以处理用户输入的 OTP,例如将其发送到服务器进行验证。
7. 清理资源
在 dispose
方法中清理 TextEditingController
:
[@override](/user/override)
void dispose() {
_otpController.dispose();
super.dispose();
}