Flutter文本字段验证插件text_field_validation的使用

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

Flutter文本字段验证插件text_field_validation的使用

text_field_validation 是一个用于在Flutter应用中对 TextField 输入进行多种类型数据验证的插件。它支持Google账号、社交网络、日期、数字等多种类型的验证,并且可以轻松集成到你的Flutter项目中。

特性

  • 支持验证Google账号、社交网络(如Facebook、Twitter等)、日期、数字、字母数字组合、IMEI、MAC地址等多种类型。
  • 提供多种上下文相关的正则表达式,便于根据具体需求定制和更新。
  • 可自定义无效输入的响应消息。
  • 易于集成到Flutter应用中。

开始使用

1. 添加依赖

首先,在你的 pubspec.yaml 文件中添加 text_field_validation 包:

dependencies: 
  text_field_validation: ^1.1.5

2. 安装包

运行以下命令来安装包:

flutter packages get

3. 导入包

在你的Dart代码中导入该包:

import 'package:text_field_validation/text_field_validation.dart';

4. 使用示例

基本用法

下面是一个简单的 TextFormField 示例,使用 TextFieldValidation.googleAccount 方法进行验证:

TextFormField(
  validator: (value) => TextFieldValidation.googleAccount(value!),
)

自定义 TextFormField

你也可以创建自己的 TextFormField 组件,并在其中使用不同的验证方法:

class AuthTextField extends StatelessWidget {
  final TextEditingController? controller;
  final Function(String?) onValidate;

  const AuthTextField({super.key, this.controller, required this.onValidate});

  [@override](/user/override)
  Widget build(BuildContext context) {
    return TextFormField(
      controller: controller,
      validator: (value) => onValidate(value),
    );
  }
}

// 在表单中使用
Form(
  key: _formKey,
  child: Column(
    children: [
      AuthTextField(
        controller: _emailController,
        onValidate: (value) => TextFieldValidation.email(value!),
      ),
      AuthTextField(
        controller: _passwordController,
        onValidate: (value) => TextFieldValidation.password(value!),
      ),
    ],
  ),
)

完整示例

以下是一个完整的示例程序,演示如何使用 text_field_validation 插件进行用户输入验证:

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

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

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

  final _keyForm = GlobalKey<FormState>();
  final _controller = TextEditingController();

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Text Field Validation',
      theme: ThemeData(
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
        useMaterial3: true,
      ),
      home: SafeArea(
        child: Scaffold(
          appBar: AppBar(title: Text('TextField Validation Example')),
          body: Center(
            child: Form(
              key: _keyForm,
              autovalidateMode: AutovalidateMode.onUserInteraction,
              child: Column(
                mainAxisAlignment: MainAxisAlignment.center,
                crossAxisAlignment: CrossAxisAlignment.center,
                children: [
                  SizedBox(
                    width: 300,
                    child: TextFormField(
                      controller: _controller,
                      decoration: InputDecoration(labelText: 'Enter your name'),
                      validator: (name) => TextFieldValidation.name(name!),
                    ),
                  ),
                  SizedBox(height: 20),
                  ElevatedButton(
                    onPressed: () {
                      if (_keyForm.currentState!.validate()) {
                        ScaffoldMessenger.of(context).showSnackBar(
                          SnackBar(content: Text('Processing Data')),
                        );
                      }
                    },
                    child: Text('Submit'),
                  ),
                ],
              ),
            ),
          ),
        ),
      ),
    );
  }
}

更多关于Flutter文本字段验证插件text_field_validation的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter文本字段验证插件text_field_validation的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,下面是一个关于如何使用Flutter的text_field_validation插件进行文本字段验证的代码示例。这个插件可以帮助你在Flutter应用中实现各种文本字段验证,如必填、最小长度、最大长度、正则表达式匹配等。

首先,你需要在你的pubspec.yaml文件中添加这个插件的依赖:

dependencies:
  flutter:
    sdk: flutter
  text_field_validation: ^1.0.0  # 请检查最新版本号

然后,你可以在你的Dart文件中使用它,如下所示:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('TextField Validation Example'),
        ),
        body: Padding(
          padding: const EdgeInsets.all(16.0),
          child: ValidationForm(),
        ),
      ),
    );
  }
}

class ValidationForm extends StatefulWidget {
  @override
  _ValidationFormState createState() => _ValidationFormState();
}

class _ValidationFormState extends State<ValidationForm> {
  final GlobalKey<FormState> _formKey = GlobalKey<FormState>();
  TextFieldValidator _nameValidator = TextFieldValidator(
    errorText: 'Name is required',
    regex: '^[a-zA-Z ]+$',
    maxLength: 50,
  );

  TextFieldValidator _emailValidator = TextFieldValidator(
    errorText: 'Email is required',
    regex: r'^\S+@\S+\.\S+$',
    maxLength: 50,
  );

  TextFieldValidator _passwordValidator = TextFieldValidator(
    errorText: 'Password is required',
    minLength: 6,
  );

  @override
  Widget build(BuildContext context) {
    return Form(
      key: _formKey,
      child: Column(
        crossAxisAlignment: CrossAxisAlignment.start,
        children: <Widget>[
          TextFormField(
            decoration: InputDecoration(labelText: 'Name'),
            validator: (value) {
              return _nameValidator.validate(value) ? null : _nameValidator.errorText;
            },
          ),
          SizedBox(height: 16),
          TextFormField(
            decoration: InputDecoration(labelText: 'Email'),
            keyboardType: TextInputType.emailAddress,
            validator: (value) {
              return _emailValidator.validate(value) ? null : _emailValidator.errorText;
            },
          ),
          SizedBox(height: 16),
          TextFormField(
            decoration: InputDecoration(labelText: 'Password'),
            obscureText: true,
            validator: (value) {
              return _passwordValidator.validate(value) ? null : _passwordValidator.errorText;
            },
          ),
          SizedBox(height: 16),
          ElevatedButton(
            onPressed: () {
              if (_formKey.currentState!.validate()) {
                // 如果验证通过,可以执行提交操作
                print('Form submitted!');
              }
            },
            child: Text('Submit'),
          ),
        ],
      ),
    );
  }
}

在这个示例中,我们定义了三个文本字段验证器:

  1. _nameValidator:用于验证名字,要求是非空且只包含字母和空格,最大长度为50。
  2. _emailValidator:用于验证电子邮件地址,要求是非空且匹配电子邮件的正则表达式,最大长度为50。
  3. _passwordValidator:用于验证密码,要求是非空且最小长度为6。

每个文本字段都使用了相应的验证器,并在表单的提交按钮上检查了所有字段的验证状态。如果所有字段都通过验证,则执行提交操作(在这个例子中,只是打印一条消息)。

你可以根据需要调整验证规则,并添加更多的文本字段和验证逻辑。

回到顶部