搜索插件、代码仓与 APP 分类

pin_input_text_field 封面
插件详情v4.5.3

pin_input_text_field

一个 textField 小部件,用于以纯 Dart 编写的不同样式 PIN 显示,无需额外依赖。

AndroidiOSWebmacOSWindowsLinux
近 30 天下载
22.7万
喜欢数
160
Pub 分数
160

安装插件

flutter pub add pin_input_text_field

插件介绍

基于插件公开信息、社区数据与项目使用情况整理的选型参考。

一个使用纯 Dart 编写的可自定义 PIN 或 OTP 输入字段的 Flutter 小部件,无需外部依赖。它为用户输入数字代码提供了简洁直观的界面,支持多种样式选项以及在字段间自动聚焦等流畅的用户交互。非常适合需要一次性密码或安全代码输入的认证流程。

适合场景

  • 一次性密码 (OTP) 输入
  • 用于登录的安全PIN输入
  • 多位数验证表单
  • 付款代码输入
  • 账户恢复工作流程
  • 生物识别认证提示

主要特点

  • 纯 Dart 实现
  • 无外部依赖
  • 可自定义样式
  • 字段间的自动对焦
  • 支持键盘输入
  • 跨平台响应式设计

适合对象

  • 身份验证屏幕
  • 双因素认证
  • 安全表单输入
  • 跨平台应用
  • 简单的数字输入界面
  • 开发者避免使用第三方库

使用建议

  • 仅限数字输入
  • 无内置验证
  • 需要手动处理提交逻辑
  • 不适合长文本输入
  • 不支持特殊字符
  • 最小化内置辅助功能

原始 README

以下为关联源码仓库的 README 原文快照,最新内容请访问源码仓库。

pub package GitHub GitHub top language

pin_input_text_field

中文 PinInputTextField is a TextField widget to help display different style pin. It supports all the platforms flutter supports.

Notes 🚨

please use 4.4.1 for flutter version is below 3.7.0

Feature 🌟

  • allow you customized the shape, any!
  • built-in 4 commonly used pin styles of shape
  • obscure support
  • solid support
  • enterColor support
  • cursor support
  • support all the textField properties theoretically
  • Flutter all platform support

Example 🦀

Thanks to the Flutter Web, you can enjoy the preview by website without any installation.

Decoration

UnderlineDecoration

BoxLooseDecoration

BoxTightDecoration

CircleDecoration

Installing 🔧

Install the latest version from pub.

Usage ✍️

Attributes

Customizable attributes for PinInputTextField

Attribute Name Example Value Description
pinLength 6 The max length of pin, the default is 6
onSubmit (String pin){} The callback will execute when user click done, sometimes is not working in Android.
decoration BoxLooseDecoration Decorate the pin, there are 3 inside styles, the default is BoxLooseDecoration
inputFormatters WhitelistingTextInputFormatter.digitsOnly Just like TextField's inputFormatter, the default is WhitelistingTextInputFormatter.digitsOnly
keyboardType TextInputType.phone Just like TextField's keyboardType, the default is TextInputType.phone
pinEditingController PinEditingController Controls the pin being edited. If null, this widget will create its own PinEditingController
autoFocus false Same as TextField's autoFocus, the default is false
focusNode FocusNode Same as TextField's focusNode
textInputAction TextInputAction.done Same as TextField's textInputAction, not working in digit mode
enabled true Same as TextField's enabled, the default is true
onChanged (String pin){} Same as TextField's onChanged
textCapitalization TextCapitalization.words Same as TextField's textCapitalization
cursor Cursor.disabled() The cursor of the pin, default is not enabled
FormField

Instead of using PinInputTextField, using PinInputTextFormField to control validate.

All built-in decorations reserve 8 logical pixels between the pin area and the validation error text by default. Configure the spacing on the decoration:

BoxLooseDecoration(
  errorTextSpacing: 16, // Defaults to 8 when omitted.
  strokeColorBuilder: const FixedColorBuilder(Colors.black),
)
ObscureStyle
/// Determine whether replace [obscureText] with number.
final bool isTextObscure;
/// The display text when [isTextObscure] is true, emoji supported
final String obscureText;

Known Issue 🥶

The PinEditingController listener will execute more than once when programmatically set text, you can filter some duplicate values in your code.

Preparing a release

Start with a dry run from an up-to-date checkout:

./scripts/prepare_release.sh --dry-run
./scripts/prepare_release.sh patch

The helper supports patch, minor, major, and an explicit version such as 4.5.3. It refreshes remote tags, refuses a latest tag that cannot be matched to the current history, and handles a pubspec.yaml version that is newer than the tagged history. A real patch release requires a clean master matching origin/master; it writes the root pubspec.yaml and CHANGELOG.md, commits and pushes them, pushes the next bare version tag, and creates the GitHub Release with generated notes. It never changes example/pubspec.yaml.

release.yml creates a GitHub Release for either bare or v SemVer tags, and publish.yml publishes bare SemVer tags to pub.dev through the pub.dev environment. Configure pub.dev's GitHub Actions publishing for this repository before the first automated publish.

License

Copyright 2019 Tino Guo.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

   http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

所属分类

源码仓库

使用此插件的项目