Flutter表单验证插件tf_validator的使用

Flutter表单验证插件tf_validator的使用

tf_validator 是一个用于 Flutter 的表单验证插件。它可以帮助开发者轻松地实现表单字段的验证逻辑。

获取开始

本项目是一个 Dart 包,包含可以跨多个 Flutter 或 Dart 项目的代码模块。如果您刚开始学习 Flutter,可以查看我们的在线文档,其中包括教程、示例、移动开发指南以及完整的 API 参考。

示例代码

下面是一个使用 tf_validator 插件的完整示例,展示了如何在 Flutter 应用中实现表单验证。

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('tf_validator 示例'),
        ),
        body: FormValidatorExample(),
      ),
    );
  }
}

class FormValidatorExample extends StatefulWidget {
  @override
  _FormValidatorExampleState createState() => _FormValidatorExampleState();
}

class _FormValidatorExampleState extends State<FormValidatorExample> {
  final GlobalKey<FormState> _formKey = GlobalKey<FormState>();

  // 控制器,用于获取输入值
  final TextEditingController _emailController = TextEditingController();
  final TextEditingController _passwordController = TextEditingController();

  @override
  Widget build(BuildContext context) {
    return Padding(
      padding: const EdgeInsets.all(16.0),
      child: Form(
        key: _formKey,
        child: Column(
          children: [
            TextFormField(
              controller: _emailController,
              decoration: InputDecoration(labelText: '邮箱'),
              validator: (value) {
                if (value == null || value.isEmpty) {
                  return '请输入邮箱地址';
                }
                if (!RegExp(r'^[\w-]+(\.[\w-]+)*@([\w-]+\.)+[a-zA-Z]{2,7}$').hasMatch(value)) {
                  return '请输入有效的邮箱地址';
                }
                return null;
              },
            ),
            SizedBox(height: 16),
            TextFormField(
              controller: _passwordController,
              decoration: InputDecoration(labelText: '密码'),
              obscureText: true,
              validator: (value) {
                if (value == null || value.isEmpty) {
                  return '请输入密码';
                }
                if (value.length < 6) {
                  return '密码长度不能少于6个字符';
                }
                return null;
              },
            ),
            SizedBox(height: 24),
            ElevatedButton(
              onPressed: () {
                if (_formKey.currentState!.validate()) {
                  // 验证通过,执行操作
                  print('验证通过');
                } else {
                  // 验证失败,不执行任何操作
                  print('验证失败');
                }
              },
              child: Text('提交'),
            ),
          ],
        ),
      ),
    );
  }

  @override
  void dispose() {
    _emailController.dispose();
    _passwordController.dispose();
    super.dispose();
  }
}

代码解释

  1. 导入库

    import 'package:flutter/material.dart';
    import 'package:tf_validator/tf_validator.dart';
    
  2. 创建主应用

    void main() {
      runApp(MyApp());
    }
    
  3. 创建应用界面

    class MyApp extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
          home: Scaffold(
            appBar: AppBar(
              title: Text('tf_validator 示例'),
            ),
            body: FormValidatorExample(),
          ),
        );
      }
    }
    
  4. 创建表单验证示例

    class FormValidatorExample extends StatefulWidget {
      @override
      _FormValidatorExampleState createState() => _FormValidatorExampleState();
    }
    
  5. 实现表单验证逻辑

    class _FormValidatorExampleState extends State<FormValidatorExample> {
      final GlobalKey<FormState> _formKey = GlobalKey<FormState>();
      final TextEditingController _emailController = TextEditingController();
      final TextEditingController _passwordController = TextEditingController();
    
      @override
      Widget build(BuildContext context) {
        return Padding(
          padding: const EdgeInsets.all(16.0),
          child: Form(
            key: _formKey,
            child: Column(
              children: [
                TextFormField(
                  controller: _emailController,
                  decoration: InputDecoration(labelText: '邮箱'),
                  validator: (value) {
                    if (value == null || value.isEmpty) {
                      return '请输入邮箱地址';
                    }
                    if (!RegExp(r'^[\w-]+(\.[\w-]+)*@([\w-]+\.)+[a-zA-Z]{2,7}$').hasMatch(value)) {
                      return '请输入有效的邮箱地址';
                    }
                    return null;
                  },
                ),
                SizedBox(height: 16),
                TextFormField(
                  controller: _passwordController,
                  decoration: InputDecoration(labelText: '密码'),
                  obscureText: true,
                  validator: (value) {
                    if (value == null || value.isEmpty) {
                      return '请输入密码';
                    }
                    if (value.length < 6) {
                      return '密码长度不能少于6个字符';
                    }
                    return null;
                  },
                ),
                SizedBox(height: 24),
                ElevatedButton(
                  onPressed: () {
                    if (_formKey.currentState!.validate()) {
                      print('验证通过');
                    } else {
                      print('验证失败');
                    }
                  },
                  child: Text('提交'),
                ),
              ],
            ),
          ),
        );
      }
    
      @override
      void dispose() {
        _emailController.dispose();
        _passwordController.dispose();
        super.dispose();
      }
    }
    

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

1 回复

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


tf_validator 是一个用于 Flutter 表单验证的插件,它提供了简洁的 API 来定义和验证表单字段。以下是如何使用 tf_validator 插件的基本步骤:

1. 添加依赖

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

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

运行 flutter pub get 来安装依赖。

2. 导入包

在需要使用 tf_validator 的文件中,导入包:

import 'package:tf_validator/tf_validator.dart';

3. 定义验证规则

使用 tf_validator 可以定义各种验证规则。以下是一些常见的验证规则示例:

final emailValidator = Validator(
  rules: [
    RequiredRule(errorText: 'Email is required'),
    EmailRule(errorText: 'Invalid email format'),
  ],
);

final passwordValidator = Validator(
  rules: [
    RequiredRule(errorText: 'Password is required'),
    MinLengthRule(minLength: 6, errorText: 'Password must be at least 6 characters'),
  ],
);

4. 在表单中使用验证器

在 Flutter 表单中使用这些验证器来验证用户输入。例如,使用 TextFormFieldForm 组件:

class MyForm extends StatefulWidget {
  @override
  _MyFormState createState() => _MyFormState();
}

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

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

5. 运行应用

现在可以运行应用并测试表单验证功能。当用户输入不符合验证规则的字段时,将显示相应的错误信息。

6. 自定义验证规则

如果需要自定义验证规则,可以通过实现 ValidationRule 接口来创建自己的验证规则:

class CustomRule implements ValidationRule {
  final String errorText;

  CustomRule({required this.errorText});

  @override
  String? validate(String? value) {
    if (value == null || value.isEmpty) {
      return errorText;
    }
    // 自定义验证逻辑
    if (value != 'custom') {
      return 'Value must be "custom"';
    }
    return null;
  }
}

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

final customValidator = Validator(
  rules: [
    RequiredRule(errorText: 'Field is required'),
    CustomRule(errorText: 'Value must be "custom"'),
  ],
);
回到顶部