返回顶部
首页 > 资讯 > 精选 >Flutter验证码输入框的实现方法有哪些
  • 771
分享到

Flutter验证码输入框的实现方法有哪些

2023-06-22 05:06:17 771人浏览 泡泡鱼
摘要

Flutter验证码输入框的实现方法有哪些,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。重点是什么?真实世界的 完美的验证码输入框或 PIN 输入 UI 通常满

Flutter验证码输入框的实现方法有哪些,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

重点是什么?

真实世界的 完美的验证码输入框或 PIN 输入 UI 通常满足以下最低要求:

  • 有4个或6个文本域,每个文本域只能接受1个字符(通常是一个数字)

  • 输入数字后自动聚焦下一个字段

您经常在需要电话号码确认、电子邮件或双因素身份验证的应用程序中看到此功能。

从头开始制作 OTP 字段

应用预览

Flutter验证码输入框的实现方法有哪些

此示例创建一个简单的 OTP 屏幕。首先,聚焦第一个输入字段。当您输入一个数字时,光标将自动移动到下一个字段。当按下提交按钮时,您输入的 OTP 代码将显示在屏幕上。

以下是它的工作原理:

测试此应用程序时,您应该使用模拟器的软键盘而不是计算机的硬件键盘。

代码

创建一个名为OtpInput的可重用小部件:

// Create an input widget that takes only one digitclass OtpInput extends StatelessWidget {  final TextEditinGController controller;  final bool autoFocus;  const OtpInput(this.controller, this.autoFocus, {Key? key}) : super(key: key);  @override  Widget build(BuildContext context) {    return SizedBox(      height: 60,      width: 50,      child: TextField(        autofocus: autoFocus,        textAlign: TextAlign.center,        keyboardType: TextInputType.number,        controller: controller,        maxLength: 1,        cursorColor: Theme.of(context).primaryColor,        decoration: const InputDecoration(            border: OutlineInputBorder(),            counterText: '',            hintStyle: TextStyle(color: Colors.black, fontSize: 20.0)),        onChanged: (value) {          if (value.length == 1) {            FocusScope.of(context).nextFocus();          }        },      ),    );  }}

main.dart 中的完整源代码和解释(我将OtpInput类放在文件底部):

import 'dart:math' as math;import 'package:flutter/cupertino.dart';import 'package:flutter/material.dart';import 'package:async/async.dart';import 'package:flutter/scheduler.dart';import 'package:url_strategy/url_strategy.dart';void main() {  setPathUrlStrategy();  runApp(MyApp());}class MyApp extends StatelessWidget {  const MyApp({Key? key}) : super(key: key);  @override  Widget build(BuildContext context) {    return MaterialApp(      // Hide the debug banner      debugShowCheckedModeBanner: false,      title: '坚果',      theme: ThemeData(        primarySwatch: Colors.indiGo,      ),      home: const HomeScreen(),    );  }}class HomeScreen extends StatefulWidget {  const HomeScreen({Key? key}) : super(key: key);  @override  State<HomeScreen> createState() => _HomeScreenState();}class _HomeScreenState extends State<HomeScreen> {  String _imageUrl =      'https://luckly007.oss-cn-beijing.aliyuncs.com/image/image-20211124085239175.png';  double _fontSize = 20;  String _title = "坚果公众号";  // 4 text editing controllers that associate with the 4 input fields  final TextEditingController _fieldOne = TextEditingController();  final TextEditingController _fieldTwo = TextEditingController();  final TextEditingController _fieldThree = TextEditingController();  final TextEditingController _fieldFour = TextEditingController();  // This is the entered code  // It will be displayed in a Text widget  String? _otp;  @override  Widget build(BuildContext context) {    return Scaffold(      appBar: AppBar(        title: Text(_title),      ),      body: Column(        mainAxisAlignment: MainAxisAlignment.center,        children: [          const Text('请输入验证码'),          const SizedBox(            height: 30,          ),          // Implement 4 input fields          Row(            mainAxisAlignment: MainAxisAlignment.spaceEvenly,            children: [              OtpInput(_fieldOne, true),              OtpInput(_fieldTwo, false),              OtpInput(_fieldThree, false),              OtpInput(_fieldFour, false)            ],          ),          const SizedBox(            height: 30,          ),          ElevatedButton(              onPressed: () {                setState(() {                  _otp = _fieldOne.text +                      _fieldTwo.text +                      _fieldThree.text +                      _fieldFour.text;                });              },              child: const Text('提交')),          const SizedBox(            height: 30,          ),          // Display the entered OTP code          Text(            _otp ?? '验证码',            style: const TextStyle(fontSize: 30),          )        ],      ),    );  }}// Create an input widget that takes only one digitclass OtpInput extends StatelessWidget {  final TextEditingController controller;  final bool autoFocus;  const OtpInput(this.controller, this.autoFocus, {Key? key}) : super(key: key);  @override  Widget build(BuildContext context) {    return SizedBox(      height: 60,      width: 50,      child: TextField(        autofocus: autoFocus,        textAlign: TextAlign.center,        keyboardType: TextInputType.number,        controller: controller,        maxLength: 1,        cursorColor: Theme.of(context).primaryColor,        decoration: const InputDecoration(            border: OutlineInputBorder(),            counterText: '',            hintStyle: TextStyle(color: Colors.black, fontSize: 20.0)),        onChanged: (value) {          if (value.length == 1) {            FocusScope.of(context).nextFocus();          }        },      ),    );  }}

使用第三个包

为了仅用几行代码快速实现您的目标,您可以使用第三方插件。在我们的例子中一些好的是pin_code_fields,otp_text_field等。 下面的例子将使用pin_code_fileds,它提供了很多很棒的功能:

Flutter验证码输入框的实现方法有哪些

  • 自动将下一个字段集中在打字上,将上一个字段集中在委派上

  • 可以设置为任意长度

  • 高度可定制

  • 输入文本的 3 种不同类型的动画

  • 动画活动、非活动、选定和禁用字段颜色切换

  • 自动对焦选项

  • 从剪贴板粘贴 OTP 代码

您还可以在终端窗口中看到您输入的字符:

Flutter验证码输入框的实现方法有哪些

代码

安装插件:

flutter pub add pin_code_fields

最终代码:

import 'dart:math' as math;import 'package:flutter/cupertino.dart';import 'package:flutter/material.dart';import 'package:async/async.dart';import 'package:pin_code_fields/pin_code_fields.dart';import 'package:url_strategy/url_strategy.dart';void main() {  setPathUrlStrategy();  runApp(MyApp());}class MyApp extends StatelessWidget {  const MyApp({Key? key}) : super(key: key);  @override  Widget build(BuildContext context) {    return MaterialApp(      // Hide the debug banner      debugShowCheckedModeBanner: false,      title: '坚果',      theme: ThemeData(        primarySwatch: Colors.indigo,      ),      home: const HomeScreen(),    );  }}class HomeScreen extends StatefulWidget {  const HomeScreen({Key? key}) : super(key: key);  @override  State<HomeScreen> createState() => _HomeScreenState();}class _HomeScreenState extends State<HomeScreen> {  String _imageUrl =      'Https://luckly007.oss-cn-beijing.aliyuncs.com/image/image-20211124085239175.png';  double _fontSize = 20;  String _title = "坚果公众号";  // 4 text editing controllers that associate with the 4 input fields  TextEditingController textEditingController = TextEditingController();  String currentText = "";  @override  Widget build(BuildContext context) {    return Scaffold(      appBar: AppBar(        title: Text(_title),      ),      body: Padding(        padding: const EdgeInsets.all(30),        child: Center(          child: PinCodeTextField(            length: 6,            obscureText: false,            animationType: AnimationType.fade,            pinTheme: PinTheme(              shape: PinCodeFieldShape.box,              borderRadius: BorderRadius.circular(5),              fieldHeight: 50,              fieldWidth: 40,              activeFillColor: Colors.white,            ),            animationDuration: const Duration(milliseconds: 300),            backgroundColor: Colors.blue.shade50,            enableActiveFill: true,            controller: textEditingController,            onCompleted: (v) {              debugPrint("Completed");            },            onChanged: (value) {              debugPrint(value);              setState(() {                currentText = value;              });            },            beforeTextPaste: (text) {              return true;            },            appContext: context,          ),        ),      ),    );  }}

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注编程网精选频道,感谢您对编程网的支持。

--结束END--

本文标题: Flutter验证码输入框的实现方法有哪些

本文链接: https://lsjlt.com/news/302721.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Flutter验证码输入框的实现方法有哪些
    Flutter验证码输入框的实现方法有哪些,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。重点是什么?真实世界的 完美的验证码输入框或 PIN 输入 UI 通常满...
    99+
    2023-06-22
  • Flutter验证码输入框的2种方法实现
    目录重点是什么?从头开始制作 OTP 字段使用第三个包结论本文向您展示了在 Flutter 中实现完美的验证码输入框几种不同方法。 重点是什么? 真实世界的 完美的验证码输入框或 P...
    99+
    2024-04-02
  • JavaScript实现密码框输入验证
    有时需要在前端页面,用户输入时先进行简单的验证,减少服务器压力 例如,限定了字段的输入长度: 输入框后有输入范围提示信息 输入错误长度的话,变成错误提示信息 输入正确长度的话,显示正...
    99+
    2024-04-02
  • Android实现短信验证码输入框
    本文实例为大家分享了Android实现短信验证码输入框的具体代码,供大家参考,具体内容如下 其实用官方自定的那个inputEditText默认带下划线的,然后自己再实行焦点和输入框...
    99+
    2024-04-02
  • Qt实现自定义验证码输入框控件的方法
    目录前言UI布局:页面样式初始化:功能实现:前言 本文实现了自定义的验证码输入框控件。控件包括图标、输入框、获取验证码按钮、验证码获取倒计时标签。支持鼠标点击获取验证码按钮后开始显示...
    99+
    2024-04-02
  • Android自定义验证码输入框的方法实例
    目录实践过程总结实践过程 前面我们学完了EditText和TextView两个组件,但是,光学不练没意思。 所以今天我们趁热打铁,利用两个组件实现个自定义验证码输入框。 思路前瞻:...
    99+
    2024-04-02
  • 手动实现js短信验证码输入框
    前言   本文记录一下自己手动实现的一个前端常见的短信验证码输入组件,从需求到实现逐步优化的过程。 正文   1.需求分析   首先看一下效果图。     首先页面加载的时...
    99+
    2024-04-02
  • uniapp手机验证码输入框如何实现
    本篇内容主要讲解“uniapp手机验证码输入框如何实现”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“uniapp手机验证码输入框如何实现”吧!如键盘被隐藏,可直接点击蓝框弹出键盘,蓝框就相当于i...
    99+
    2023-07-05
  • js实现验证码输入框示例详解
    目录前言思路遇到的问题HTMLCSSJS前言 验证码输入框应该是很常见的需求吧,不知道各位小伙伴在在遇到的时候是选择找一找插件还是自己动手撸一个呢?我花了点时间撸了一个出来,实际体验...
    99+
    2024-04-02
  • uniapp自定义输入框,实现验证码输入框、密码输入框、兼容微信小程序
    前言 在移动端或者小程序项目中,验证码输入框、密码输入框也是很常见的,今天我们就来实现一个这样的效果。 图片展示 代码实现 我这里是用uniapp实现的可兼容微信小程序。 大家如果需要微信小程序也可以参考此案例,实现思路都是一样的。 {{...
    99+
    2023-08-18
    微信小程序 uni-app 小程序
  • 如何使用Android实现常见的验证码输入框
    小编给大家分享一下如何使用Android实现常见的验证码输入框,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!正文先搂一眼效果吧不要把注意力都放在头顶的那一抹绿上,...
    99+
    2023-05-30
    android
  • Android实现自定义验证码输入框效果(实例代码)
    这里提一下,这个当时也是在网上看到一个博主写的代码改了下用在我么项目中的验证码输入框。博主的地址不记得了这里只能顺带标注一下。。。 效果图如下: 就是这个酱紫 直入主题,代码...
    99+
    2022-06-06
    自定义 输入 验证码 输入框 Android
  • Python实现验证回文串的方法有哪些
    这篇文章主要介绍了Python实现"验证回文串"的方法有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。python可以做什么Python是一种编程语言...
    99+
    2023-06-14
  • 详解iOS 验证码输入的实现思路
    如图所示,现在很多App采用了类似下划线、方块等方式的验证码输入,直观美观!对于这种效果的实现方式,大概有以下几种方式: 1.多个UITextField组成 这种方式好处是有光标闪...
    99+
    2022-05-23
    ios 验证码 输入
  • JS 有趣的eval优化输入验证实例代码
    复制代码 代码如下://eval就是计算字符串【可以放任何js代码】里的值//1、 var str1='12+3';      &n...
    99+
    2022-11-15
    JS eval 优化输入验证
  • 使用request实现手工输入验证码登录
    我们的目标网站是这个http://awehome.com.cn,登录页面是这个http://awehome.com.cn/tenant/login import requests import json url = 'http://a...
    99+
    2023-01-30
    验证码 手工 request
  • php验证码输出乱码的解决方法
    小编给大家分享一下php验证码输出乱码的解决方法,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!php验证码输出乱码的解决办法:1、检查并修改访问验证码生成方法函数...
    99+
    2023-06-08
  • Android实现验证码登录的方法
    这篇文章主要介绍了Android实现验证码登录的方法,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。结果展示1.导包1在项目的gradle中导入maven {&nbs...
    99+
    2023-06-14
  • php手机验证码实现的方法
    这篇文章主要介绍“php手机验证码实现的方法”,在日常操作中,相信很多人在php手机验证码实现的方法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”php手机验证码实现的方法”的疑惑有所帮助!接下来,请跟着小编...
    99+
    2023-06-07
  • Python中交叉验证的方法有哪些
    这篇文章主要介绍“Python中交叉验证的方法有哪些”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Python中交叉验证的方法有哪些”文章能帮助大家解决问题。一、什么是交叉验证?交叉验证是一种用于估...
    99+
    2023-06-29
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作