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

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

简介

flutter_auth_code_textfield 是一个用于在 Flutter 应用中实现验证码输入功能的自定义 Widget。它支持 Android 和 iOS 平台,并且提供了两种不同的样式:单个项目的模式(类似于 Keep)和底部线模式(类似于钉钉)。

使用方法

单个项目模式(Single Item Mode)

这种模式下的验证码输入框看起来像 Keep 的验证码输入框。

AuthCodeTextfield(
  mode: AuthCodeMode.singleItem,
  itemWidth: 50,
  itemHeight: 50,
  itemSpacing: 35 * scaleWidth,
  itemBackgroundColor: Color.fromRGBO(120, 114, 127, 1),
  textColor: Colors.white,
  cursorColor: Color.fromRGBO(94, 178, 138, 1),
  onChanged: (s) {
    setState(() {
      _inputText = s;
    });
  },
)

底部线模式(Bottom Line Mode)

这种模式下的验证码输入框看起来像钉钉的验证码输入框。

AuthCodeTextfield(
  mode: AuthCodeMode.bottomLine,
  itemWidth: 50,
  itemHeight: 60,
  itemSpacing: 35 * scaleWidth,
  itemBottomLineColor: Color.fromRGBO(229, 231, 233, 1),
  cursorWidth: 1,
  cursorHeight: 30,
  onChanged: (s) {
    _inputText = s;
    if (s.toString().length >= 4 && widget.onSubmited != null) {
      widget.onSubmited(_inputText);
      Navigator.pop(context);
    }
  },
)

安装与配置

  1. pubspec.yaml 文件中添加依赖:

    dependencies:
      auth_code_textfield: ^0.0.2
    

    如果你需要支持 Flutter 2.0 的 null safety,可以使用以下版本:

    dependencies:
      auth_code_textfield: ^2.0.0
    
  2. 在你的项目中导入并使用该库:

    import 'package:flutter/material.dart';
    import 'package:flutter/services.dart';
    import 'package:flutter_auth_code_textfield/auth_code_textfield.dart';
    

示例代码

下面是一个完整的示例代码,展示了如何在 Flutter 应用中使用 flutter_auth_code_textfield 插件。

import 'package:flutter/material.dart';
import 'package:flutter_auth_code_textfield/auth_code_textfield.dart';
import 'package:flutter/services.dart';

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
        visualDensity: VisualDensity.adaptivePlatformDensity,
      ),
      home: MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  MyHomePage({Key? key, this.title}) : super(key: key);
  final String? title;

  [@override](/user/override)
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  String _receiveCode = '';

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        brightness: Brightness.dark,
        title: Text(widget.title ?? ""),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            Text('Receive code : $_receiveCode'),
            SizedBox(height: 20),
            Container(
              width: 200,
              height: 44,
              child: ElevatedButton(
                onPressed: () {
                  Navigator.push(
                    context,
                    MaterialPageRoute(
                      builder: (_) => ItemLoginDemoPage(
                        onSubmited: (s) {
                          _receiveCode = s;
                          setState(() {});
                        },
                      ),
                    ),
                  );
                },
                child: Text('Item Mode Demo'),
              ),
            ),
            SizedBox(height: 20),
            Container(
              width: 200,
              height: 44,
              child: ElevatedButton(
                onPressed: () {
                  Navigator.push(
                    context,
                    MaterialPageRoute(
                      builder: (_) => BottomLineLoginPage(
                        onSubmited: (s) {
                          _receiveCode = s;
                          setState(() {});
                        },
                      ),
                    ),
                  );
                },
                child: Text('Bottom Line Mode Demo'),
              ),
            ),
          ],
        ),
      ),
    );
  }
}

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

1 回复

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


当然,以下是如何在Flutter项目中使用auth_code_textfield插件来实现验证码输入的一个示例代码。这个插件允许你创建一个自定义的验证码输入框,非常适合用于短信验证码输入等场景。

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

dependencies:
  flutter:
    sdk: flutter
  auth_code_textfield: ^2.0.0  # 请检查最新版本号

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

接下来,你可以在你的Flutter应用中使用这个插件。以下是一个简单的示例代码,展示如何使用AuthCodeTextField

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

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

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

class AuthCodeScreen extends StatefulWidget {
  @override
  _AuthCodeScreenState createState() => _AuthCodeScreenState();
}

class _AuthCodeScreenState extends State<AuthCodeScreen> {
  final TextEditingController _controller = TextEditingController();
  final FocusNode _focusNode = FocusNode();

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

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Auth Code Input Example'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            AuthCodeTextField(
              controller: _controller,
              focusNode: _focusNode,
              length: 6, // 验证码长度
              width: 40.0, // 每个输入框的宽度
              height: 50.0, // 每个输入框的高度
              onCompleted: (value) {
                // 当验证码输入完成时触发
                print('Completed code: $value');
              },
              onChanged: (value) {
                // 当验证码输入改变时触发
                print('Current code: $value');
              },
              decoration: InputDecoration(
                border: OutlineInputBorder(),
                labelText: 'Enter Code',
              ),
              keyboardType: TextInputType.number,
              textStyle: TextStyle(fontSize: 20),
              autoFocus: true,
            ),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: () {
                // 提交按钮的点击事件
                print('Submit code: ${_controller.text}');
              },
              child: Text('Submit'),
            ),
          ],
        ),
      ),
    );
  }
}

在这个示例中:

  1. AuthCodeTextField用于创建一个验证码输入框。
  2. controllerfocusNode用于控制输入框的文本和焦点。
  3. length属性指定了验证码的长度。
  4. onCompleted回调函数在验证码输入完成时触发。
  5. onChanged回调函数在验证码输入改变时触发。
  6. decoration属性用于设置输入框的装饰,比如边框和标签文本。
  7. keyboardType设置为TextInputType.number,确保键盘只显示数字。
  8. textStyle用于设置输入框中文本的样式。
  9. autoFocus设置为true,使得输入框在创建时自动获得焦点。

这个示例代码提供了一个基本的验证码输入界面,你可以根据需要进一步自定义和扩展。

回到顶部