Flutter表单验证插件awesome_validator的使用

Flutter表单验证插件awesome_validator的使用

awesome_validator 是一个用于 Flutter 表单字段验证的插件,提供了常见的验证选项。

使用

以下是一个基本的验证器示例:

// 基本验证器
TextFormField(
    validator: EmailValidator(errorText: '请输入有效的电子邮件地址')
);

多重验证器

awesome_validator 还支持多重验证器,例如同时验证密码是否为空且长度至少为8位:

final passwordValidator = MultiValidator([
    RequiredValidator(errorText: '密码不能为空'),
    MinLengthValidator(8, errorText: '密码必须至少为8个字符长'),
]);

final TextEditingController password = TextEditingController();

Form(
    key: formKey,
    child: Column(children: [
        TextFormField(
            obscureText: true,
            onChanged: (val) => password.text = val,
            validator: passwordValidator,
        ),
    ]),
);

示例

以下是一个完整的示例,演示如何在 Flutter 应用中使用 awesome_validator 插件进行表单验证。

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

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

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

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      theme: ThemeData(
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
        useMaterial3: true,
      ),
      home: const MyHomePage(title: 'Awesome Validator'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({super.key, required this.title});

  final String title;

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

class _MyHomePageState extends State<MyHomePage> {
  final GlobalKey<FormState> formKey = GlobalKey<FormState>();

  final TextEditingController password = TextEditingController();
  final TextEditingController email = TextEditingController();

  final passwordValidator = MultiValidator([
    RequiredValidator(errorText: '密码不能为空'),
    MinLengthValidator(8, errorText: '密码必须至少为8个字符长'),
  ]);

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            Padding(
              padding: const EdgeInsets.all(8.0),
              child: Form(
                  key: formKey,
                  child: Column(
                    children: [
                      Padding(
                        padding: const EdgeInsets.all(8.0),
                        child: TextFormField(
                          controller: email,
                          decoration: const InputDecoration(
                            border: OutlineInputBorder(),
                            hintText: '输入电子邮件',
                          ),
                          validator: EmailValidator(
                              errorText: '请输入有效的电子邮件'),
                        ),
                      ),
                      Padding(
                        padding: const EdgeInsets.all(8.0),
                        child: TextFormField(
                          controller: password,
                          obscureText: true,
                          decoration: const InputDecoration(
                            border: OutlineInputBorder(),
                            hintText: '输入密码',
                          ),
                          validator: passwordValidator,
                        ),
                      ),
                    ],
                  )),
            ),
            ElevatedButton(
              onPressed: () {
                if (formKey.currentState!.validate()) {
                  // 表单已验证,执行操作
                  print('表单已验证!');
                }
              },
              child: const Text('提交'),
            ),
          ],
        ),
      ),
    );
  }
}

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

1 回复

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


awesome_validator 是一个用于 Flutter 的表单验证插件,它提供了简单且强大的验证功能,能够帮助你轻松地验证表单中的输入数据。以下是如何使用 awesome_validator 的基本步骤:

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  awesome_validator: ^1.0.0  # 请查看最新版本

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

2. 导入包

在你的 Dart 文件中导入 awesome_validator

import 'package:awesome_validator/awesome_validator.dart';

3. 创建表单和验证规则

你可以使用 AwesomeValidator 来定义验证规则,并将其应用到表单字段上。

class MyForm extends StatefulWidget {
  [@override](/user/override)
  _MyFormState createState() => _MyFormState();
}

class _MyFormState extends State<MyForm> {
  final _formKey = GlobalKey<FormState>();
  final _emailController = TextEditingController();
  final _passwordController = TextEditingController();

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Form(
      key: _formKey,
      child: Column(
        children: [
          TextFormField(
            controller: _emailController,
            decoration: InputDecoration(labelText: 'Email'),
            validator: (value) => AwesomeValidator().validateEmail(value),
          ),
          TextFormField(
            controller: _passwordController,
            decoration: InputDecoration(labelText: 'Password'),
            obscureText: true,
            validator: (value) => AwesomeValidator().validatePassword(value),
          ),
          ElevatedButton(
            onPressed: () {
              if (_formKey.currentState!.validate()) {
                // 表单验证通过,执行提交操作
                print('Form is valid');
              }
            },
            child: Text('Submit'),
          ),
        ],
      ),
    );
  }

  [@override](/user/override)
  void dispose() {
    _emailController.dispose();
    _passwordController.dispose();
    super.dispose();
  }
}

4. 使用验证规则

AwesomeValidator 提供了多种内置的验证规则,例如:

  • validateEmail: 验证电子邮件地址。
  • validatePassword: 验证密码。
  • validateRequired: 验证字段是否为空。
  • validateMinLength: 验证字段的最小长度。
  • validateMaxLength: 验证字段的最大长度。
  • validateNumeric: 验证字段是否为数字。
  • validateAlpha: 验证字段是否为字母。
  • validateAlphaNumeric: 验证字段是否为字母或数字。

你还可以自定义验证规则:

validator: (value) => AwesomeValidator().validate(
  value,
  rules: [
    RuleRequired(),
    RuleMinLength(6),
    RuleMaxLength(20),
  ],
),

5. 处理验证结果

TextFormFieldvalidator 属性中,你可以使用 AwesomeValidator 提供的验证规则。如果验证失败,validator 将返回一个错误消息,TextFormField 会自动显示这个错误消息。

6. 提交表单

当用户点击提交按钮时,调用 _formKey.currentState!.validate() 来触发表单验证。如果所有字段都通过验证,validate() 将返回 true,否则返回 false

7. 自定义错误消息

你可以通过 Rule 类的 message 参数来自定义错误消息:

validator: (value) => AwesomeValidator().validate(
  value,
  rules: [
    RuleRequired(message: 'This field is required'),
    RuleMinLength(6, message: 'Minimum length is 6 characters'),
  ],
),

8. 其他功能

awesome_validator 还支持更复杂的验证场景,例如组合多个规则、自定义验证函数等。

示例代码

以下是一个完整的示例代码:

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

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: Text('Awesome Validator Example')),
        body: MyForm(),
      ),
    );
  }
}

class MyForm extends StatefulWidget {
  [@override](/user/override)
  _MyFormState createState() => _MyFormState();
}

class _MyFormState extends State<MyForm> {
  final _formKey = GlobalKey<FormState>();
  final _emailController = TextEditingController();
  final _passwordController = TextEditingController();

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Form(
      key: _formKey,
      child: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Column(
          children: [
            TextFormField(
              controller: _emailController,
              decoration: InputDecoration(labelText: 'Email'),
              validator: (value) => AwesomeValidator().validateEmail(value),
            ),
            TextFormField(
              controller: _passwordController,
              decoration: InputDecoration(labelText: 'Password'),
              obscureText: true,
              validator: (value) => AwesomeValidator().validatePassword(value),
            ),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: () {
                if (_formKey.currentState!.validate()) {
                  // 表单验证通过,执行提交操作
                  print('Form is valid');
                }
              },
              child: Text('Submit'),
            ),
          ],
        ),
      ),
    );
  }

  [@override](/user/override)
  void dispose() {
    _emailController.dispose();
    _passwordController.dispose();
    super.dispose();
  }
}
回到顶部