Flutter表单验证插件utopia_validation的使用

在Flutter开发中,处理表单验证是一个常见的需求。utopia_validation是一个功能强大的表单验证插件,可以帮助开发者轻松实现表单字段的校验。本文将详细介绍如何使用 utopia_validation 插件,并通过一个完整的示例演示其用法。

安装插件utopia_validation

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

dependencies:
  utopia_validation: ^版本号

然后运行以下命令安装依赖:

flutter pub get

插件utopia_validation基本用法

导入插件

在使用 utopia_validation 之前,需要先导入插件:

import 'package:utopia_validation/utopia_validation.dart';

创建表单控制器

utopia_validation 提供了 FormController 类来管理表单的状态。我们可以创建一个 FormController 实例来控制表单的验证逻辑。

final formController = FormController();

定义验证规则

你可以为每个表单字段定义不同的验证规则。例如,用户名必须是非空字符串,密码必须包含至少一个数字。

final usernameRule = RequiredValidator(errorText: '用户名不能为空');
final passwordRule = MinLengthValidator(min: 6, errorText: '密码长度不能少于6位');
final hasNumberRule = RegexValidator(
  regex: r'[0-9]',
  errorText: '密码必须包含至少一个数字',
);

绑定验证规则到表单字段

接下来,我们将这些规则应用到表单字段中。例如,假设我们有一个简单的登录表单,包含用户名和密码两个字段。

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

class _LoginFormState extends State<LoginForm> {
  final formController = FormController();

  // 定义表单字段
  final usernameField = TextField(
    controller: TextEditingController(),
    decoration: InputDecoration(labelText: '用户名'),
    validator: formController.validate('username', [
      usernameRule,
    ]),
  );

  final passwordField = TextField(
    controller: TextEditingController(),
    obscureText: true,
    decoration: InputDecoration(labelText: '密码'),
    validator: formController.validate('password', [
      passwordRule,
      hasNumberRule,
    ]),
  );

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text('登录')),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Column(
          children: [
            usernameField,
            SizedBox(height: 20),
            passwordField,
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: () {
                if (formController.validateAll()) {
                  print('表单验证通过');
                } else {
                  print('表单验证失败');
                }
              },
              child: Text('提交'),
            ),
          ],
        ),
      ),
    );
  }
}

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

1 回复

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


utopia_validation 是一个用于 Flutter 的表单验证插件,它提供了一种简单且灵活的方式来验证表单输入。通过使用 utopia_validation,你可以轻松地定义验证规则,并在表单提交时检查输入的有效性。

安装

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

dependencies:
  flutter:
    sdk: flutter
  utopia_validation: ^1.0.0  # 请使用最新版本

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

基本用法

  1. 导入包

    import 'package:utopia_validation/utopia_validation.dart';
    
  2. 创建验证器

    你可以使用 Validator 类来创建验证器。Validator 提供了多种内置的验证规则,如 required, minLength, maxLength, email, 等等。

    final validator = Validator({
      'username': [RequiredRule(), MinLengthRule(3)],
      'email': [RequiredRule(), EmailRule()],
      'password': [RequiredRule(), MinLengthRule(6)],
    });
    
  3. 验证表单

    在表单提交时,你可以使用 validator.validate 方法来验证表单数据。validate 方法返回一个 ValidationResult 对象,其中包含验证结果和错误信息。

    void submitForm(Map<String, String> formData) {
      ValidationResult result = validator.validate(formData);
    
      if (result.isValid) {
        // 表单数据有效,继续处理
        print('Form is valid');
      } else {
        // 表单数据无效,显示错误信息
        print('Form is invalid');
        result.errors.forEach((field, errors) {
          print('$field: ${errors.join(', ')}');
        });
      }
    }
    
  4. 在 Flutter 表单中使用

    你可以在 Flutter 的 FormTextFormField 中使用 utopia_validation 来验证用户输入。

    class MyForm extends StatefulWidget {
      @override
      _MyFormState createState() => _MyFormState();
    }
    
    class _MyFormState extends State<MyForm> {
      final _formKey = GlobalKey<FormState>();
      final Map<String, String> _formData = {};
    
      final validator = Validator({
        'username': [RequiredRule(), MinLengthRule(3)],
        'email': [RequiredRule(), EmailRule()],
        'password': [RequiredRule(), MinLengthRule(6)],
      });
    
      void _submitForm() {
        if (_formKey.currentState!.validate()) {
          _formKey.currentState!.save();
          ValidationResult result = validator.validate(_formData);
    
          if (result.isValid) {
            // 表单数据有效,继续处理
            print('Form is valid');
          } else {
            // 表单数据无效,显示错误信息
            print('Form is invalid');
            result.errors.forEach((field, errors) {
              print('$field: ${errors.join(', ')}');
            });
          }
        }
      }
    
      @override
      Widget build(BuildContext context) {
        return Form(
          key: _formKey,
          child: Column(
            children: [
              TextFormField(
                decoration: InputDecoration(labelText: 'Username'),
                onSaved: (value) => _formData['username'] = value!,
                validator: (value) => validator.validateField('username', value),
              ),
              TextFormField(
                decoration: InputDecoration(labelText: 'Email'),
                onSaved: (value) => _formData['email'] = value!,
                validator: (value) => validator.validateField('email', value),
              ),
              TextFormField(
                decoration: InputDecoration(labelText: 'Password'),
                obscureText: true,
                onSaved: (value) => _formData['password'] = value!,
                validator: (value) => validator.validateField('password', value),
              ),
              ElevatedButton(
                onPressed: _submitForm,
                child: Text('Submit'),
              ),
            ],
          ),
        );
      }
    }
    

自定义验证规则

你可以通过继承 ValidationRule 类来创建自定义的验证规则。

class CustomRule extends ValidationRule {
  @override
  String? validate(String? value) {
    if (value != null && value.contains('custom')) {
      return null; // 验证通过
    }
    return 'Value must contain "custom"'; // 验证失败
  }
}

然后在验证器中使用自定义规则:

final validator = Validator({
  'customField': [CustomRule()],
});
回到顶部