Flutter验证码生成插件verification_code_builder的使用

Flutter验证码生成插件verification_code_builder的使用

verification_code_builder

一个无限可定制的用于创建验证码输入表单的widget。
灵感来源于flutter_verification_code

特性

  • 可以通过builder回调定义单元格小部件。你完全控制单元格的行为和外观!
  • 内置粘贴操作支持。
  • 支持退格键按下跟踪。如果你不喜欢额外的“清除所有”按钮,这特别有用。
  • 自动焦点控制。你不需要自己定义焦点切换逻辑。在单元格小部件中只需调用focus.nextFocus()当当前字段输入完成后——verification_code_builder会处理其余的事情。

待办事项

  1. 单元格内字符数量的派生支持
  2. 单元格正则表达式和onError回调支持
  3. isEditing标志
  4. getCurrentIndex方法
  5. Logo

使用方法

1. 导入库

import 'package:verification_code_builder/verification_code_builder.dart';

2. 在需要的地方使用VerificationCode

[@override](/user/override)
Widget build(BuildContext context) {
  return Scaffold(
    appBar: AppBar(
      title: Text('VerificationCode'),
    ),
    body: Center(
      child: VerificationCode(
        length: 6, // 设置单元格的数量
        onCompleted: (String value) {
          print("Code is $value"); // 设置结果的回调函数
        },
        builder: (index, focus, textEditingController, pasteMethod) { // 构建单元格小部件
          return _generateSingleDigit(index, focus, textEditingController, pasteMethod);
        },
      ),
    )
  );
}

// 构建单个数字单元格
Widget _generateSingleDigit(
  int index, // VerificationCode小部件中的单元格索引
  FocusNode focus, // 当前单元格的焦点。VerificationCode使用它来管理单元格的焦点
  TextEditingController textEditingController, // 单元格输入处理器
  PasteMethod pasteMethod // 粘贴机制。使用它执行粘贴(例如使用SelectionControls)
) {
  return Container(
    height: 48,
    width: 48,
    margin: EdgeInsets.only(left: 3),
    decoration: BoxDecoration(
      borderRadius: BorderRadius.all(Radius.circular(8)),
      color: Colors.grey),
    child: Center(
      child: TextField( // 如果你基于TextField构建单元格...
        controller: textEditingController, // 只需在这里插入textEditingController参数
        focusNode: focus, // 和焦点在这里
        autofocus: index == 0, // 可以使用索引来自动聚焦第一个单元格
        // 使用此自定义SelectionControls小部件以获得“原生”般的粘贴体验
        selectionControls: VerificationSelectionControls.create(pasteMethod),
        inputFormatters: [FilteringTextInputFormatter.digitsOnly, LengthLimitingTextInputFormatter(1)],
        keyboardType: TextInputType.number,
        textAlign: TextAlign.center,
        style: TextStyle(
          color: Colors.black,
          fontSize: 30,
          fontWeight: FontWeight.w700,
        ),
        onChanged: (str) => {
          if (str.isNotEmpty) {
            index == 5 ? FocusScope.of(context).unfocus() : focus.nextFocus()
          }
        },
      ),
    ),
  );
}

更多关于Flutter验证码生成插件verification_code_builder的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter验证码生成插件verification_code_builder的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


verification_code_builder 是一个用于生成验证码的 Flutter 插件。它可以帮助你快速生成自定义的验证码,并且可以轻松地集成到你的 Flutter 应用中。以下是如何使用 verification_code_builder 插件的详细步骤。

1. 添加依赖

首先,你需要在 pubspec.yaml 文件中添加 verification_code_builder 插件的依赖。

dependencies:
  flutter:
    sdk: flutter
  verification_code_builder: ^1.0.0  # 请使用最新版本

然后运行 flutter pub get 来获取依赖。

2. 导入插件

在你的 Dart 文件中导入 verification_code_builder 插件。

import 'package:verification_code_builder/verification_code_builder.dart';

3. 使用 VerificationCodeBuilder

VerificationCodeBuilder 是一个小部件,你可以将它添加到你的 UI 中。以下是一个简单的示例:

import 'package:flutter/material.dart';
import 'package:verification_code_builder/verification_code_builder.dart';

class VerificationCodeScreen extends StatefulWidget {
  @override
  _VerificationCodeScreenState createState() => _VerificationCodeScreenState();
}

class _VerificationCodeScreenState extends State<VerificationCodeScreen> {
  String _verificationCode = '';

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Verification Code'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            VerificationCodeBuilder(
              length: 6, // 验证码的长度
              onChanged: (code) {
                setState(() {
                  _verificationCode = code;
                });
              },
              builder: (context, code) {
                return Text(
                  code,
                  style: TextStyle(fontSize: 24, fontWeight: FontWeight.bold),
                );
              },
            ),
            SizedBox(height: 20),
            Text(
              'Entered Code: $_verificationCode',
              style: TextStyle(fontSize: 18),
            ),
          ],
        ),
      ),
    );
  }
}

4. 自定义验证码样式

你可以通过 builder 参数来自定义验证码的显示样式。例如,你可以使用 ContainerText 来创建自定义的验证码显示。

VerificationCodeBuilder(
  length: 6,
  onChanged: (code) {
    setState(() {
      _verificationCode = code;
    });
  },
  builder: (context, code) {
    return Row(
      mainAxisAlignment: MainAxisAlignment.center,
      children: code.split('').map((char) {
        return Container(
          margin: EdgeInsets.symmetric(horizontal: 4),
          padding: EdgeInsets.all(8),
          decoration: BoxDecoration(
            border: Border.all(color: Colors.black),
            borderRadius: BorderRadius.circular(4),
          ),
          child: Text(
            char,
            style: TextStyle(fontSize: 24, fontWeight: FontWeight.bold),
          ),
        );
      }).toList(),
    );
  },
),

5. 处理验证码输入

onChanged 回调会在用户输入验证码时触发。你可以在这个回调中处理验证码的输入逻辑,例如验证用户输入的验证码是否正确。

VerificationCodeBuilder(
  length: 6,
  onChanged: (code) {
    setState(() {
      _verificationCode = code;
    });
    if (code.length == 6) {
      // 验证码输入完成,进行验证
      _verifyCode(code);
    }
  },
  builder: (context, code) {
    return Text(
      code,
      style: TextStyle(fontSize: 24, fontWeight: FontWeight.bold),
    );
  },
),

6. 验证码验证逻辑

你可以在 _verifyCode 方法中实现验证码的验证逻辑。

void _verifyCode(String code) {
  // 这里可以实现验证码的验证逻辑
  if (code == '123456') {
    // 验证码正确
    ScaffoldMessenger.of(context).showSnackBar(
      SnackBar(content: Text('验证码正确')),
    );
  } else {
    // 验证码错误
    ScaffoldMessenger.of(context).showSnackBar(
      SnackBar(content: Text('验证码错误')),
    );
  }
}

7. 其他配置

VerificationCodeBuilder 还提供了其他一些配置选项,例如:

  • autofocus: 是否自动聚焦输入框。
  • keyboardType: 输入框的键盘类型。
  • obscureText: 是否隐藏输入的字符。
VerificationCodeBuilder(
  length: 6,
  autofocus: true,
  keyboardType: TextInputType.number,
  obscureText: true,
  onChanged: (code) {
    setState(() {
      _verificationCode = code;
    });
  },
  builder: (context, code) {
    return Text(
      code,
      style: TextStyle(fontSize: 24, fontWeight: FontWeight.bold),
    );
  },
),
回到顶部