Flutter输入验证码插件input_code_field的使用
Flutter输入验证码插件input_code_field的使用
InputCodeControl
小部件提供了一个用于输入PIN码、短信验证码以及其他认证码的文本字段。它还可以用于输入高度格式化的输入,例如日期和时间。该小部件支持退格键盘按钮。
支持开发 ☕
开发和维护此插件需要时间和精力。如果您觉得这个插件有用,并且愿意表达您的感激之情,可以考虑进行捐赠。您的贡献有助于确保插件的持续开发和改进。🚀
您可以进行捐赠并买杯咖啡以保持发展势头:
您的支持至关重要,每一份捐赠都深受欢迎。感谢您帮助使这个插件变得更好!🙏
使用
InputCodeControl
处理代码字段的所有逻辑、验证和状态管理。它还存储当前值和下一个字段的索引指针。
InputCodeField
是一个具有下划线的标准文本字段,可以通过InputCodeDecoration
进行自定义。它支持启用和禁用字段、遮蔽输入以及设置字段的大小、颜色和其他属性。
final InputCodeControl codeControl = InputCodeControl(inputRegex: '^[0-9]*$');
InputCodeField(
control: codeControl,
count: 6,
inputType: TextInputType.number,
decoration: InputCodeDecoration(
focusColor: Colors.blueGrey,
),
),
手动自定义
为了更好地视觉控制,您可以使用itemBuilder
回调来构建自定义字段项。要获取给定索引处的字符,可以使用InputCodeControl
对象上的[]
操作符。要检查给定索引处的项是否处于焦点状态,可以使用InputCodeControl.isFocused(index)
方法。要检查整个小部件是否处于焦点状态,可以使用InputCodeControl.hasFocus
方法。
InputCodeField(
control: codeControl,
itemBuilder: (context, index) => CustomCodeItem(
char: control.stringCode.code[index],
fieldFocused: codeControl.hasFocus,
itemFocused: codeControl.isFocused(index),
),
);
class CustomCodeItem extends StatelessWidget {
final String char;
final bool fieldFocused;
final bool itemFocused;
const CustomCodeItem({
Key? key,
this.char = '',
this.fieldFocused = false,
this.itemFocused = false,
}) : super(key: key);
[@override](/user/override)
Widget build(BuildContext context) {
return Container(
width: 42.0,
height: 42.0,
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(6.0),
color: fieldFocused ? (itemFocused ? Colors.grey : Colors.grey.withOpacity(0.5)) : Colors.grey.withOpacity(0.25),
border: Border.all(color: itemFocused ? Colors.black : Colors.grey),
),
child: Center(
child: Text(
char,
style: Theme.of(context).primaryTextTheme.headline4,
),
),
);
}
}
为了获得完全的视觉控制,可以使用builder
回调来构建整个输入小部件。InputCodeField
和InputCodeControl
将继续处理所有输入逻辑和键盘操作。
InputCodeField(
control: codeControl,
builder: (context) => CustomCodeField(
control: codeControl,
),
);
class CustomCodeField extends StatelessWidget {
final InputCodeControl control;
const CustomCodeField({
Key? key,
required this.control,
}) : super(key: key);
[@override](/user/override)
Widget build(BuildContext context) {
final List<Widget> items = [];
for (int i = 0; i < control.count; i++) {
if (i > 0 && i % 3 == 0) {
items.add(Container(
margin: EdgeInsets.symmetric(horizontal: 24.0),
height: 32.0,
width: 2.0,
color: control.hasFocus ? Colors.green : Colors.blueGrey,
));
items.add(Container(
height: 42,
width: 1.0,
color: Colors.blueGrey,
));
}
items.add(Expanded(
child: Container(
height: 42.0,
color: control.isFocused(i, true) ? Colors.greenAccent.withOpacity(0.25) : Colors.transparent,
child: Center(
child: Text(
control[i],
style: Theme.of(context).primaryTextTheme.headline4,
),
),
),
));
if (i < control.count - 1) {
items.add(Container(
height: 42,
width: 1.0,
color: Colors.blueGrey,
));
}
}
return ClipRRect(
borderRadius: BorderRadius.circular(16.0),
child: Container(
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(16.0),
border: Border.all(color: control.hasFocus ? Colors.green : Colors.blueGrey),
),
child: Row(
children: items,
),
),
);
}
}
更多关于Flutter输入验证码插件input_code_field的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter输入验证码插件input_code_field的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是如何在Flutter项目中使用input_code_field
插件来实现验证码输入的一个示例代码。input_code_field
插件允许你创建一个自定义的验证码输入框,非常适合用于短信验证码等场景。
首先,确保你已经在pubspec.yaml
文件中添加了input_code_field
依赖:
dependencies:
flutter:
sdk: flutter
input_code_field: ^x.y.z # 请替换为最新版本号
然后,运行flutter pub get
来安装依赖。
接下来,在你的Dart文件中,你可以按照以下方式使用InputCodeField
:
import 'package:flutter/material.dart';
import 'package:input_code_field/input_code_field.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: Scaffold(
appBar: AppBar(
title: Text('验证码输入示例'),
),
body: Center(
child: Padding(
padding: const EdgeInsets.all(16.0),
child: _CodeInputScreen(),
),
),
),
);
}
}
class _CodeInputScreen extends StatefulWidget {
@override
_CodeInputScreenState createState() => _CodeInputScreenState();
}
class _CodeInputScreenState extends State<_CodeInputScreen> {
final List<TextEditingController> _controllers = List.generate(6, (index) {
return TextEditingController();
});
@override
void dispose() {
_controllers.forEach((controller) => controller.dispose());
super.dispose();
}
void _onCompleted(String code) {
print('输入的验证码是: $code');
// 在这里处理验证码输入完成后的逻辑,比如发送到服务器验证
}
@override
Widget build(BuildContext context) {
return InputCodeField(
controllers: _controllers,
length: 6,
width: 40.0,
height: 50.0,
border: OutlineInputBorder(
borderRadius: BorderRadius.circular(8),
),
borderActive: OutlineInputBorder(
borderSide: BorderSide(color: Colors.blue, width: 2.0),
borderRadius: BorderRadius.circular(8),
),
style: TextStyle(fontSize: 20),
activeStyle: TextStyle(fontSize: 20, color: Colors.blue),
onCompleted: _onCompleted,
onCompletedColor: Colors.blue,
inputFormatters: [FilteringTextInputFormatter.digitsOnly],
textDirection: TextDirection.ltr,
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisSpacing: 8.0,
crossAxisSpacing: 8.0,
animationDuration: Duration(milliseconds: 300),
keyboardType: TextInputType.number,
decoration: InputDecoration(
counterText: '',
),
);
}
}
代码说明:
-
依赖导入:
- 导入
flutter/material.dart
和input_code_field/input_code_field.dart
。
- 导入
-
控制器创建:
- 使用
TextEditingController
的列表来管理每个输入框的控制器。这里我们生成了6个控制器,假设验证码长度为6。
- 使用
-
资源释放:
- 在
dispose
方法中释放所有控制器的资源。
- 在
-
验证码输入完成处理:
onCompleted
回调方法会在所有输入框填充完成后被调用,这里我们简单地打印出输入的验证码。
-
InputCodeField配置:
controllers
:传入控制器列表。length
:验证码的长度。width
和height
:每个输入框的宽度和高度。border
和borderActive
:输入框的普通和激活状态下的边框样式。style
和activeStyle
:输入框的普通和激活状态下的文本样式。onCompleted
:验证码输入完成后的回调。onCompletedColor
:验证码输入完成后的颜色。inputFormatters
:限制输入只能为数字。textDirection
、mainAxisAlignment
、crossAxisAlignment
、mainAxisSpacing
和crossAxisSpacing
:布局相关的参数。animationDuration
:动画持续时间。keyboardType
:键盘类型设置为数字键盘。decoration
:输入框的装饰,这里我们禁用了计数器文本。
这样,你就可以在Flutter应用中实现一个自定义的验证码输入框了。