Flutter一次性密码输入插件otp_pin_field_fork的使用

Flutter一次性密码输入插件otp_pin_field_fork的使用

简介

otp_pin_field_fork 是一个用于生成一次性密码输入框的 Flutter 包。它提供了美观的设计和动画效果,是一个高度可定制化的 Flutter 小部件,用于输入一次性密码。

创建者:Shivam Mishra
联系方式:@shivbo96

支持作者:


使用方法

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 约束

为了确保短信验证码能够被正确接收,需要满足以下条件:

  1. 短信内容不得超过 140 字节。
  2. 必须包含一次性验证码,并将其发送回服务器以完成验证流程。
  3. 结尾必须附加一个 11 位的哈希字符串,用于标识应用。

例如:

8125 是你的验证码 Ov114rXIhwf (Ov114rXIhwf 是你的哈希值,请在日志中搜索并添加到短信中)

更多关于Flutter一次性密码输入插件otp_pin_field_fork的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于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 的长度。
  • fieldWidthfieldHeight: 每个输入框的宽度和高度。
  • borderRadius: 输入框的圆角。
  • textStyle: 输入框中的文本样式。
  • activeColor, inactiveColor, selectedColor: 不同状态下的边框颜色。

你可以根据项目需求调整这些参数。

6. 处理 OTP 输入

onCompleted 回调中,你可以处理用户输入的 OTP,例如将其发送到服务器进行验证。

7. 清理资源

dispose 方法中清理 TextEditingController

[@override](/user/override)
void dispose() {
  _otpController.dispose();
  super.dispose();
}
回到顶部