Flutter表单验证插件wc_form_validators的使用

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

Flutter表单验证插件wc_form_validators的使用

简介

wc_form_validators 是一个Flutter插件,它提供了一系列可以用于表单字段的验证器。这个插件受到了Angular Validators类的启发,旨在简化Flutter中的表单验证过程。以下是关于如何使用该插件进行表单验证的详细介绍。

使用方法

1. 添加依赖

首先,在pubspec.yaml文件中添加wc_form_validators作为依赖项:

dependencies:
  flutter:
    sdk: flutter
  wc_form_validators: ^最新版本号

2. 导入库

在需要使用的Dart文件顶部导入wc_form_validators

import 'package:wc_form_validators/wc_form_validators.dart';

3. 验证器示例

3.1 必填项验证 (Required)

确保文本框不为空。

TextFormField(
  decoration: InputDecoration(
    labelText: 'Name',
  ),
  validator: Validators.required('Name is required'),
),

3.2 最小值验证 (Minimum)

验证输入是否大于等于指定值。

TextFormField(
  keyboardType: TextInputType.numberWithOptions(decimal: true, signed: true),
  decoration: InputDecoration(
    labelText: 'Minimum 5',
  ),
  validator: Validators.min(5, 'Value less than 5 not allowed'),
),

3.3 最大值验证 (Maximum)

验证输入是否小于等于指定值。

TextFormField(
  keyboardType: TextInputType.numberWithOptions(decimal: true, signed: true),
  decoration: InputDecoration(
    labelText: 'Maximum 5',
  ),
  validator: Validators.max(5, 'Value greater than 5 not allowed'),
),

3.4 邮箱格式验证 (Email)

验证输入是否符合邮箱格式。

TextFormField(
  decoration: InputDecoration(
    labelText: 'Email',
  ),
  validator: Validators.email('Invalid email address'),
),

3.5 最小长度验证 (Min Length)

验证输入字符串长度是否大于等于指定值。

TextFormField(
  decoration: InputDecoration(
    labelText: 'Minimum length 5',
  ),
  validator: Validators.minLength(5, 'Characters are less than 5'),
),

3.6 最大长度验证 (Max Length)

验证输入字符串长度是否小于等于指定值。

TextFormField(
  decoration: InputDecoration(
    labelText: 'Maximum length 5',
  ),
  validator: Validators.maxLength(5, 'Characters are greater than 5'),
),

3.7 正则表达式模式匹配 (Pattern)

根据自定义正则表达式验证输入内容。

TextFormField(
  decoration: InputDecoration(
    labelText: 'Only alphabets',
  ),
  validator: Validators.patternString(r"^[A-Za-z]+$", 'Only alphabets are allowed'),
),

3.8 多个验证组合 (Compose)

将多个验证器组合在一起使用。

TextFormField(
  decoration: InputDecoration(
    labelText: 'Name',
  ),
  validator: Validators.compose([
    Validators.required('Name is required'),
    Validators.minLength(5, 'Name cannot be less than 5 characters'),
    Validators.maxLength(10, 'Name cannot be greater than 10 characters'),
  ]),
),

4. 完整示例代码

以下是一个完整的示例应用程序,展示了如何集成上述所有类型的验证器:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      theme: ThemeData(
        primarySwatch: Colors.blue,
        inputDecorationTheme: InputDecorationTheme(
          border: OutlineInputBorder(),
        ),
        buttonTheme: ButtonThemeData(
          textTheme: ButtonTextTheme.primary,
        ),
      ),
      home: Scaffold(
        appBar: AppBar(
          title: Text('Form Validators Example'),
        ),
        body: _Body(),
      ),
    );
  }
}

class _Body extends StatelessWidget {
  final GlobalKey<FormState> _formKey = GlobalKey<FormState>();

  void _submitForm() {
    if (_formKey.currentState!.validate()) {
      // Form is valid
      print("Form Submitted");
    }
  }

  @override
  Widget build(BuildContext context) {
    return Padding(
      padding: const EdgeInsets.all(16.0),
      child: Form(
        key: _formKey,
        child: ListView(
          children: <Widget>[
            TextFormField(
              decoration: InputDecoration(
                labelText: 'Name',
              ),
              validator: Validators.compose([
                Validators.required('Name is required'),
                Validators.minLength(5, 'Name cannot be less than 5 characters'),
                Validators.maxLength(10, 'Name cannot be greater than 10 characters'),
              ]),
            ),
            TextFormField(
              keyboardType: TextInputType.emailAddress,
              decoration: InputDecoration(
                labelText: 'Email',
              ),
              validator: Validators.email('Invalid email address'),
            ),
            TextFormField(
              keyboardType: TextInputType.numberWithOptions(decimal: true, signed: true),
              decoration: InputDecoration(
                labelText: 'Minimum 5',
              ),
              validator: Validators.min(5, 'Value less than 5 not allowed'),
            ),
            TextFormField(
              keyboardType: TextInputType.numberWithOptions(decimal: true, signed: true),
              decoration: InputDecoration(
                labelText: 'Maximum 5',
              ),
              validator: Validators.max(5, 'Value greater than 5 not allowed'),
            ),
            TextFormField(
              decoration: InputDecoration(
                labelText: 'Minimum length 5',
              ),
              validator: Validators.minLength(5, 'Characters are less than 5'),
            ),
            TextFormField(
              decoration: InputDecoration(
                labelText: 'Maximum length 5',
              ),
              validator: Validators.maxLength(5, 'Characters are greater than 5'),
            ),
            TextFormField(
              decoration: InputDecoration(
                labelText: 'Only alphabets',
              ),
              validator: Validators.patternString(r"^[A-Za-z]+$", 'Only alphabets are allowed'),
            ),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: _submitForm,
              child: Text('Submit'),
            ),
          ],
        ),
      ),
    );
  }
}

此示例创建了一个包含多种不同类型验证器的表单,并通过点击“Submit”按钮来触发验证逻辑。如果所有验证都通过,则会在控制台打印一条消息表示表单已成功提交。


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

1 回复

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


当然,以下是如何在Flutter中使用wc_form_validators插件进行表单验证的代码示例。wc_form_validators是一个流行的Flutter插件,它提供了一系列方便的方法来验证各种表单输入。

首先,确保你的pubspec.yaml文件中已经添加了wc_form_validators依赖:

dependencies:
  flutter:
    sdk: flutter
  wc_form_validators: ^x.y.z  # 请替换为最新版本号

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

以下是一个简单的Flutter应用示例,展示了如何使用wc_form_validators进行表单验证:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Form Validation Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  final GlobalKey<FormState> _formKey = GlobalKey<FormState>();
  String _email = '';
  String _password = '';
  bool _autoValidate = false;

  void _validateInputs() {
    if (_formKey.currentState!.validate()) {
      _formKey.currentState!.save();
      // 处理表单提交逻辑
      print('Email: $_email');
      print('Password: $_password');
    } else {
      setState(() {
        _autoValidate = true;
      });
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Form Validation Demo'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Form(
          key: _formKey,
          autoValidateMode: _autoValidate ? AutovalidateMode.onUserInteraction : AutovalidateMode.disabled,
          child: Column(
            crossAxisAlignment: CrossAxisAlignment.start,
            children: [
              TextFormField(
                decoration: InputDecoration(labelText: 'Email'),
                validator: (value) {
                  if (value == null || value.isEmpty) {
                    return 'Email is required';
                  } else if (!EmailValidator().isValid(value)) {
                    return 'Invalid email';
                  }
                  return null;
                },
                onSaved: (value) {
                  _email = value!;
                },
              ),
              SizedBox(height: 16),
              TextFormField(
                decoration: InputDecoration(labelText: 'Password'),
                obscureText: true,
                validator: (value) {
                  if (value == null || value.isEmpty) {
                    return 'Password is required';
                  } else if (value.length < 6) {
                    return 'Password must be at least 6 characters long';
                  }
                  return null;
                },
                onSaved: (value) {
                  _password = value!;
                },
              ),
              SizedBox(height: 16),
              ElevatedButton(
                onPressed: _validateInputs,
                child: Text('Submit'),
              ),
            ],
          ),
        ),
      ),
    );
  }
}

在这个示例中,我们创建了一个简单的表单,其中包含两个字段:Email和密码。我们使用wc_form_validators中的EmailValidator来验证Email字段的有效性。

以下是关键点:

  1. 全局表单键GlobalKey<FormState> _formKey用于访问表单的状态。
  2. 验证函数_validateInputs函数在点击提交按钮时调用,验证表单字段并保存数据。
  3. 自动验证模式:通过autoValidateMode属性控制自动验证行为。当表单字段验证失败时,将_autoValidate设置为true以启用用户交互时的自动验证。
  4. 表单字段TextFormField用于创建表单字段,每个字段都有一个validator函数来执行验证逻辑,并有一个onSaved回调来保存数据。

这个示例展示了如何使用wc_form_validators进行基本的表单验证,你可以根据需要扩展和修改这个示例以适应你的具体需求。

回到顶部