欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.csdn.net

前言

表单验证是 App 开发中最无聊但又最不能马虎的环节。
“邮箱格式对不对?”、“密码是不是太短了?”、“确认密码和密码是否一致?”…
原生的 Flutter TextFormField 需要传入一个 validator 回调,这往往导致代码中充斥着大量的 if (value == null || value.isEmpty)... 判断逻辑,不仅难看,还难以复用。

form_validator 这是一个优雅的链式调用验证库,它让你像写句子一样写验证逻辑。

对于 OpenHarmony 开发者,使用它能让你的登录、注册、个人信息编辑页面的代码行数减少 50% 以上,且逻辑清晰,维护轻松。

一、核心原理

该库使用了构建者模式(Builder Pattern),通过链式调用叠加验证规则,最后生成 Flutter 标准的 FormFieldValidator<String> 函数。

required()

email()

maxLength()

Pass

Fail

用户输入

ValidationBuilder

非空检查

正则检查

长度检查

返回 null (通过)

返回错误提示

二、OpenHarmony 适配说明

form_validatorPure Dart 逻辑库,不依赖任何 UI 和平台 API。
100% 兼容 OpenHarmony

国际化提示
该库支持自定义错误提示信息。在鸿蒙应用中,建议结合 intl 库,传入本地化后的错误提示,而不是硬编码中文或英文。

三、基础用例

3.1 基础验证

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

Widget buildEmailField() {
  return TextFormField(
    decoration: InputDecoration(labelText: '邮箱'),
    // 链式调用:必填 -> 必须是邮箱格式 -> 最大50字符
    validator: ValidationBuilder()
        .required('请输入邮箱')
        .email('邮箱格式不正确')
        .maxLength(50)
        .build(),
  );
}

在这里插入图片描述

3.2 自定义规则 (扩展)

你可以通过 add 方法添加自定义逻辑,比如检查“必须是鸿蒙开发者账号”。

final passwordValidator = ValidationBuilder()
    .required()
    .minLength(6)
    .add((value) {
      if (value == '123456') {
        return '密码太简单了';
      }
      return null;
    })
    .build();

四、完整实战示例:鸿蒙账号注册页

这个示例展示了如何处理表单中较复杂的“确认密码”验证(需要比较两个字段)。

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

class RegisterPage extends StatefulWidget {
  
  _RegisterPageState createState() => _RegisterPageState();
}

class _RegisterPageState extends State<RegisterPage> {
  final _formKey = GlobalKey<FormState>();
  final _passController = TextEditingController();

  void _submit() {
    if (_formKey.currentState!.validate()) {
      print('✅ 表单验证通过,提交注册...');
    }
  }

  
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text('注册鸿蒙账号')),
      body: Padding(
        padding: EdgeInsets.all(16),
        child: Form(
          key: _formKey,
          child: Column(
            children: [
              TextFormField(
                decoration: InputDecoration(labelText: '手机号'),
                validator: ValidationBuilder()
                    .phone('请输入有效的手机号') // 内置 phone 验证
                    .required()
                    .build(),
              ),
              SizedBox(height: 16),
              TextFormField(
                controller: _passController,
                decoration: InputDecoration(labelText: '设置密码'),
                obscureText: true,
                validator: ValidationBuilder()
                    .required()
                    .minLength(8, '密码至少8位')
                    .regExp(RegExp(r'(?=.*[a-z])(?=.*[0-9])'), '需包含字母和数字')
                    .build(),
              ),
              SizedBox(height: 16),
              TextFormField(
                decoration: InputDecoration(labelText: '确认密码'),
                obscureText: true,
                // 关键:自定义闭包验证逻辑,比较两个输入框
                validator: (value) {
                  return ValidationBuilder()
                      .required()
                      .add((v) => v != _passController.text ? '两次密码不一致' : null)
                      .build()(value);
                },
              ),
              SizedBox(height: 32),
              ElevatedButton(
                onPressed: _submit,
                child: Text('立即注册'),
              ),
            ],
          ),
        ),
      ),
    );
  }
}

在这里插入图片描述

五、总结

form_validator 让验证逻辑变得可读、可组合
在 OpenHarmony 的业务开发中,虽然 UI 框架提供了基础的验证机制,但引入这样一个轻量级的工具库,能显著提升开发者的幸福感,避免在处理繁琐表单时陷入逻辑泥潭。

Logo

作为“人工智能6S店”的官方数字引擎,为AI开发者与企业提供一个覆盖软硬件全栈、一站式门户。

更多推荐