Flutter表单验证插件flunt_dart_validation的使用

Flutter表单验证插件flunt_dart_validation的使用

本文将介绍如何在Flutter项目中使用flunt_dart_validation插件来实现表单验证。通过本教程,您可以快速掌握该插件的基本用法,并能够将其应用于实际开发中。


Features(功能)

  • 强大的表单验证功能:支持多种内置规则(如必填项、邮箱格式、手机号码等)。
  • 灵活扩展:可以根据需求自定义验证规则。
  • 简洁易用:API设计简洁,易于集成到现有项目中。

Getting started(开始使用)

安装插件

pubspec.yaml文件中添加以下依赖:

dependencies:
  flunt_dart_validation: ^0.0.1

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

flutter pub get

Usage(使用示例)

示例代码

以下是一个完整的示例,展示如何使用flunt_dart_validation插件进行表单验证。

main.dart

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: FormValidationExample(),
    );
  }
}

class FormValidationExample extends StatefulWidget {
  @override
  _FormValidationExampleState createState() => _FormValidationExampleState();
}

class _FormValidationExampleState extends State<FormValidationExample> {
  final GlobalKey<FormState> _formKey = GlobalKey<FormState>();
  String _email = '';
  String _password = '';

  // 表单提交逻辑
  void _submitForm() {
    if (_formKey.currentState!.validate()) {
      print('表单验证成功');
    } else {
      print('表单验证失败');
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Flunt Dart Validation 示例'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Form(
          key: _formKey,
          child: Column(
            children: [
              TextFormField(
                decoration: InputDecoration(labelText: '邮箱'),
                validator: (value) {
                  return value != null && !value.isValidEmail()
                      ? '请输入有效的邮箱地址'
                      : null;
                },
                onChanged: (value) {
                  setState(() {
                    _email = value;
                  });
                },
              ),
              SizedBox(height: 16),
              TextFormField(
                obscureText: true,
                decoration: InputDecoration(labelText: '密码'),
                validator: (value) {
                  return value != null && value.length < 6
                      ? '密码长度不能少于6位'
                      : null;
                },
                onChanged: (value) {
                  setState(() {
                    _password = value;
                  });
                },
              ),
              SizedBox(height: 16),
              ElevatedButton(
                onPressed: _submitForm,
                child: Text('提交'),
              )
            ],
          ),
        ),
      ),
    );
  }
}

代码说明

  1. 导入插件

    import 'package:flunt_dart_validation/flunt_dart_validation.dart';
    

    导入flunt_dart_validation插件,用于表单验证。

  2. 表单结构 使用Form组件包裹表单控件,并通过GlobalKey<FormState>管理表单状态:

    final GlobalKey<FormState> _formKey = GlobalKey<FormState>();
    
  3. 字段验证 每个TextFormField都通过validator属性定义验证逻辑:

    validator: (value) {
      return value != null && !value.isValidEmail()
          ? '请输入有效的邮箱地址'
          : null;
    },
    
    • 验证邮箱格式:isValidEmail()
    • 验证密码长度:value.length < 6
  4. 表单提交 在按钮点击事件中调用_formKey.currentState!.validate()检查表单是否有效:

    void _submitForm() {
      if (_formKey.currentState!.validate()) {
        print('表单验证成功');
      } else {
        print('表单验证失败');
      }
    }
    

Additional information(更多信息)

自定义验证规则

如果内置规则无法满足需求,可以扩展Flunt类来自定义验证规则。例如:

extension CustomValidation on String {
  bool isValidCustomRule() {
    return this == 'custom';
  }
}

然后在validator中使用自定义规则:

validator: (value) {
  return value != null && !value.isValidCustomRule()
      ? '值必须为 "custom"'
      : null;
},

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

1 回复

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


flunt_dart_validation 是一个用于 Flutter 的表单验证插件,它基于 flunt 库,提供了一种简洁的方式来验证表单数据。flunt 是一个用于验证和通知的库,通常用于处理业务规则和验证逻辑。

安装

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

dependencies:
  flunt_dart_validation: ^1.0.0

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

基本用法

flunt_dart_validation 提供了一个 ValidationContract 类,你可以通过它来定义验证规则。以下是一个简单的示例,展示如何使用 flunt_dart_validation 来验证表单数据。

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

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

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

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

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

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

  void _submitForm() {
    if (_formKey.currentState!.validate()) {
      // 表单验证通过,处理表单数据
      print('Form is valid');
      print('Name: ${_nameController.text}');
      print('Email: ${_emailController.text}');
    }
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Form(
      key: _formKey,
      child: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Column(
          children: [
            TextFormField(
              controller: _nameController,
              decoration: InputDecoration(labelText: 'Name'),
              validator: (value) {
                var contract = ValidationContract()
                  ..isRequired(value, 'Name', 'Name is required')
                  ..hasMinLen(value, 3, 'Name', 'Name must be at least 3 characters');
                if (contract.isValid) return null;
                return contract.notifications.first.message;
              },
            ),
            TextFormField(
              controller: _emailController,
              decoration: InputDecoration(labelText: 'Email'),
              validator: (value) {
                var contract = ValidationContract()
                  ..isRequired(value, 'Email', 'Email is required')
                  ..isEmail(value, 'Email', 'Invalid email address');
                if (contract.isValid) return null;
                return contract.notifications.first.message;
              },
            ),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: _submitForm,
              child: Text('Submit'),
            ),
          ],
        ),
      ),
    );
  }
}
回到顶部