Flutter验证码处理插件flutter_verification_code的使用

发布于 1周前 作者 h691938207 来自 Flutter

Flutter验证码处理插件flutter_verification_code的使用

简介

flutter_verification_code 是一个Flutter包,它可以帮助您创建一个验证码输入框。该插件基于https://github.com/tiny-express/flutter_verification_code_input,并添加了当用户在完成填写后删除字符时的状态变化功能。此外,从1.1.0版本开始,支持整个验证码的复制和粘贴。

安装后,在您的Dart代码中可以使用如下导入语句:

import 'package:flutter_verification_code/flutter_verification_code.dart';

使用方法

基本用法

下面是一个基本的例子,展示了如何使用VerificationCode小部件来创建一个简单的验证码输入框。

VerificationCode(
  textStyle: TextStyle(fontSize: 20.0, color: Colors.red[900]),
  keyboardType: TextInputType.number,
  underlineColor: Colors.amber, // 如果为null,则使用来自Theme的primaryColor: Colors.red
  length: 4,
  cursorColor: Colors.blue, // 如果为null,则默认为环境色
  clearAll: Padding(
    padding: const EdgeInsets.all(8.0),
    child: Text(
      'clear all',
      style: TextStyle(fontSize: 14.0, decoration: TextDecoration.underline, color: Colors.blue[700]),
    ),
  ),
  onCompleted: (String value) {
    setState(() {
      _code = value;
    });
  },
  onEditing: (bool value) {
    setState(() {
      _onEditing = value;
    });
    if (!_onEditing) FocusScope.of(context).unfocus();
  },
),

完整示例代码

以下是一个完整的示例代码,您可以直接将其用于自己的项目中进行测试。

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

void main() => runApp(const MyApp());

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.green,
        primaryColor: Colors.red,
        hintColor: Colors.green,
      ),
      home: const MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({super.key});

  @override
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  bool _onEditing = true;
  String? _code;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Center(
          child: Text('Example verify code'),
        ),
      ),
      body: Column(
        children: [
          const Padding(
            padding: EdgeInsets.all(8.0),
            child: Center(
              child: Text(
                'Enter your code',
                style: TextStyle(fontSize: 20.0),
              ),
            ),
          ),
          VerificationCode(
            textStyle: Theme.of(context)
                .textTheme
                .bodyText2!
                .copyWith(color: Theme.of(context).primaryColor),
            keyboardType: TextInputType.number,
            underlineColor: Colors.amber, // 如果为null,则使用来自Theme的primaryColor: Colors.red
            length: 4,
            cursorColor: Colors.blue, // 如果为null,则默认为环境色
            clearAll: Padding(
              padding: const EdgeInsets.all(8.0),
              child: Text(
                'clear all',
                style: TextStyle(
                  fontSize: 14.0,
                  decoration: TextDecoration.underline,
                  color: Colors.blue[700],
                ),
              ),
            ),
            margin: const EdgeInsets.all(12),
            onCompleted: (String value) {
              setState(() {
                _code = value;
              });
            },
            onEditing: (bool value) {
              setState(() {
                _onEditing = value;
              });
              if (!_onEditing) FocusScope.of(context).unfocus();
            },
          ),
          Padding(
            padding: const EdgeInsets.all(8.0),
            child: Center(
              child: _onEditing
                  ? const Text('Please enter full code')
                  : Text('Your code: $_code'),
            ),
          )
        ],
      ),
    );
  }
}

复制粘贴功能

如果您想了解更多关于如何使用复制粘贴功能的信息,请参考这个GitHub issue中的讨论。完整示例可以在此链接找到。

展示案例

以下是两个展示案例的截图: Image|100x100, 10% Image|100x100, 10%

致谢

这是由Agoradesk开发的一个项目,Agoradesk是一个点对点(P2P)加密货币交易平台。该项目由LocalMonero背后的团队创建,LocalMonero是最大且最值得信赖的Monero P2P交易平台。

希望这些信息能帮助您更好地理解和使用flutter_verification_code插件!如果有任何问题或需要进一步的帮助,请随时提问。


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

1 回复

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


当然,以下是如何在Flutter项目中使用flutter_verification_code插件来处理验证码的一个简单示例。flutter_verification_code插件允许你轻松地在Flutter应用中显示和处理验证码输入。

首先,确保你已经在pubspec.yaml文件中添加了flutter_verification_code依赖:

dependencies:
  flutter:
    sdk: flutter
  flutter_verification_code: ^x.y.z  # 请替换为最新版本号

然后运行flutter pub get来安装依赖。

接下来,你可以在你的Flutter项目中使用该插件。以下是一个完整的示例代码,展示如何在Flutter应用中集成和使用flutter_verification_code插件:

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

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Verification Code Example',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: VerificationCodeScreen(),
    );
  }
}

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

class _VerificationCodeScreenState extends State<VerificationCodeScreen> {
  final GlobalKey<VerificationCodeState> _key = GlobalKey();
  String _code = '';

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Verification Code Input'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.start,
          children: <Widget>[
            Text('Enter the verification code sent to your phone:'),
            SizedBox(height: 16.0),
            VerificationCode(
              key: _key,
              length: 6,  // 验证码长度
              width: 40.0,  // 每个格子的宽度
              height: 50.0,  // 每个格子的高度
              onCompleted: (code) {
                setState(() {
                  _code = code;
                });
                print('Completed Code: $_code');
              },
              onChanged: (code) {
                print('Current Code: $code');
              },
              autoFocus: true,
              cursorColor: Colors.black,
              itemCount: 6,
              itemBuilder: (BuildContext context, int index) {
                return Container(
                  decoration: BoxDecoration(
                    border: Border.all(color: Colors.grey[300]!),
                    borderRadius: BorderRadius.circular(5.0),
                  ),
                  margin: EdgeInsets.symmetric(horizontal: 2.0),
                );
              },
            ),
            SizedBox(height: 24.0),
            ElevatedButton(
              onPressed: () {
                // 提交验证码逻辑
                final code = _key.currentState?.currentText ?? '';
                print('Submitted Code: $code');
                // 在这里处理验证码提交逻辑,比如发送到服务器验证
              },
              child: Text('Submit Code'),
            ),
          ],
        ),
      ),
    );
  }
}

代码解释

  1. 依赖安装:在pubspec.yaml文件中添加flutter_verification_code依赖。
  2. UI结构:使用Scaffold构建UI结构,包含一个AppBar和一个ColumnColumn中包含文本说明、验证码输入框和提交按钮。
  3. 验证码输入框:使用VerificationCode组件来创建验证码输入框,设置验证码的长度、宽度、高度、完成回调和变化回调。
  4. 提交按钮:使用ElevatedButton创建提交按钮,点击按钮时获取当前输入的验证码并打印出来(你可以在这里添加发送到服务器进行验证的逻辑)。

注意事项

  • 确保你已经按照插件文档正确配置了权限,特别是在Android和iOS项目中处理短信权限。
  • 根据你的实际需求调整验证码长度、输入框样式等参数。

希望这个示例能帮助你在Flutter项目中集成和使用flutter_verification_code插件。

回到顶部