Flutter验证码输入插件pincode_input_fields的使用

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

Flutter验证码输入插件pincode_input_fields的使用

简介

pincode_input_fields 是一个用于在 Flutter 应用程序中提供验证码输入功能的小部件。

快速开始

首先,在你的 pubspec.yaml 文件中添加依赖:

dependencies:
  pincode_input_fields: ^x.x.x

然后运行 flutter pub get 来获取最新的包。

在你的应用中使用 PincodeInputFields 小部件:

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

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

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

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        body: Center(
          child: PincodeInputFields(),
        ),
      ),
    );
  }
}

如果你想要控制输入,可以使用 PincodeInputFieldsController

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

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

class MyApp extends StatelessWidget {
  final _controller = PincodeInputFieldsController();

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        body: Center(
          child: PincodeInputFields(
            controller: _controller,
          ),
        ),
      ),
    );
  }
}

完整示例

以下是一个完整的示例,展示了如何自定义 PincodeInputFields 的外观和行为:

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

void main() {
  runApp(const PincodeInputFieldsApp());
}

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

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        backgroundColor: const Color(0xFF1A1B20),
        body: Center(
          child: PincodeInputFields(
            // 设置验证码长度为6
            length: 6,
            // 设置每个输入框的高度
            heigth: 54,
            // 设置每个输入框的宽度
            width: 51,
            // 设置输入框圆角半径
            borderRadius: BorderRadius.circular(9),
            // 设置未聚焦状态下的边框样式
            unfocusBorder: Border.all(
              width: 1,
              color: const Color(0xFF5B6774),
            ),
            // 设置聚焦状态下的边框样式
            focusBorder: Border.all(
              width: 1,
              color: const Color(0xFF9B71F4),
            ),
            // 设置光标颜色
            cursorColor: Colors.white,
            // 设置光标宽度
            cursorWidth: 2,
            // 设置聚焦状态下输入框的颜色
            focusFieldColor: const Color(0xFF2A2B32),
            // 设置未聚焦状态下输入框的颜色
            unfocusFieldColor: const Color(0xFF2A2B32),
            // 设置输入框文本样式
            textStyle: const TextStyle(
              color: Colors.white,
              fontSize: 21,
            ),
          ),
        ),
      ),
    );
  }
}

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

1 回复

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


当然,以下是一个关于如何使用Flutter中的pincode_input_fields插件来实现验证码输入的示例代码。这个插件非常适合用于需要用户输入固定长度数字(如验证码)的场景。

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

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

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

接下来是一个简单的示例代码,展示如何使用pincode_input_fields插件:

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

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

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

class PinCodeScreen extends StatefulWidget {
  @override
  _PinCodeScreenState createState() => _PinCodeScreenState();
}

class _PinCodeScreenState extends State<PinCodeScreen> {
  final _pinCodeController = TextEditingController();
  final _focusNode = FocusNode();

  @override
  void dispose() {
    _pinCodeController.dispose();
    _focusNode.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('验证码输入示例'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            PinCodeTextField(
              appContext: context,
              length: 6, // 验证码长度
              animationType: AnimationType.fade,
              controller: _pinCodeController,
              focusNode: _focusNode,
              onCompleted: (pin) {
                // 用户完成输入后的回调
                print('输入的验证码: $pin');
                // 例如,可以提交验证码
                // Navigator.pushNamed(context, '/submitPin', arguments: pin);
              },
              onChanged: (pin) {
                // 用户输入变化时的回调
                print('当前输入的验证码: $pin');
              },
              beforeTextPaste: (text) {
                // 在粘贴文本前的回调,可以限制粘贴内容
                return text.replaceAll(RegExp(r'[^0-9]'), '');
              },
              pinTheme: PinTheme(
                shape: PinCodeFieldShape.box,
                borderRadius: BorderRadius.circular(8),
                fieldSize: 50,
                activeColor: Colors.blue,
                inactiveColor: Colors.grey,
                activeBorderColor: Colors.blueAccent,
                inactiveBorderColor: Colors.grey[300]!,
                selectedColor: Colors.blue[900]!,
                animationDuration: Duration(milliseconds: 300),
                enableActiveFocus: true,
              ),
              animationDuration: Duration(milliseconds: 300),
              keyboardType: TextInputType.number,
              textStyle: TextStyle(fontSize: 20),
            ),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: () {
                // 清空输入内容
                _pinCodeController.clear();
              },
              child: Text('清空'),
            ),
          ],
        ),
      ),
    );
  }
}

代码说明:

  1. 依赖导入:确保在pubspec.yaml中添加了pincode_input_fields依赖。
  2. UI布局:使用ScaffoldAppBarPaddingColumn来布局界面。
  3. 验证码输入框:使用PinCodeTextField来创建验证码输入框,支持多种自定义属性,如长度、动画类型、控制器、焦点节点等。
  4. 回调处理
    • onCompleted:用户完成输入后的回调。
    • onChanged:用户输入变化时的回调。
    • beforeTextPaste:在粘贴文本前的回调,可以限制粘贴内容。
  5. 样式自定义:通过PinTheme来自定义输入框的样式,如形状、边框半径、字段大小、颜色等。
  6. 清空按钮:添加了一个按钮用于清空输入框的内容。

这个示例展示了如何使用pincode_input_fields插件来创建一个用户友好的验证码输入界面,你可以根据自己的需求进一步自定义和扩展这个示例。

回到顶部