Flutter表单验证插件validated的使用

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

Flutter表单验证插件Validated的使用

validated 是一个强大的Dart和Flutter字符串验证库,包含45个验证器和清理器。本文将介绍如何在Flutter应用中使用该插件进行表单验证,并提供完整的示例代码。

安装

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

dependencies:
  flutter:
    sdk: flutter
  validated: ^latest_version

记得替换^latest_version为最新版本号,可以通过Pub.dev查看。

使用方法

导入库

在需要使用的文件顶部导入validated包:

import 'package:validated/validated.dart' as validate;

验证函数示例

下面是一些基本的验证函数示例:

void main() {
  print(validate.isBoolean('a')); // false
  print(validate.isEmail("adib@gmail.com")); // true
  print(validate.isAscii("ABCDEF")); // false
  print(validate.isSameType('String', false)); // false
  print(validate.isUpperCase("ADIB")); // true
  print(validate.isCapitalized("Adib")); // true
  print(validate.contains("Dart is nice", "nice")); // true
  print(validate.isCurrency("\$")); // false
  print(validate.isURL('https://www.google.com')); // true
  print(validate.isEmoji("😀")); // true
}

清理器(Sanitizers)

除了验证功能外,validated还提供了多种数据类型转换的清理器:

void sanitizeExample() {
  String booleanStr = 'true';
  bool booleanValue = validate.toBoolean(booleanStr);
  
  String dateStr = '2023-10-01';
  DateTime dateValue = validate.toDate(dateStr);
  
  String doubleStr = '123.45';
  double doubleValue = validate.toDouble(doubleStr);
  
  String floatStr = '123.45';
  float floatValue = validate.toFloat(floatStr);
  
  String intStr = '123';
  int intValue = validate.toInt(intStr);
  
  var obj = {'key': 'value'};
  String strFromObj = validate.toString(obj);
}

完整Demo

以下是一个完整的Flutter应用示例,演示了如何使用validated进行表单验证:

import 'package:flutter/material.dart';
import 'package:validated/validated.dart' as validate;

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

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

class MyHomePage extends StatefulWidget {
  MyHomePage({Key key, this.title}) : super(key: key);

  final String title;

  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  final TextEditingController _emailController = TextEditingController();
  final GlobalKey<FormState> _formKey = GlobalKey<FormState>();

  void _validateInputs() {
    if (_formKey.currentState.validate()) {
      ScaffoldMessenger.of(context).showSnackBar(SnackBar(content: Text('Processing Data')));
    } else {
      ScaffoldMessenger.of(context).showSnackBar(SnackBar(content: Text('Fix Errors')));
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Form(
        key: _formKey,
        child: Column(
          children: <Widget>[
            TextFormField(
              controller: _emailController,
              decoration: InputDecoration(labelText: 'Email'),
              validator: (value) {
                if (!validate.isEmail(value)) {
                  return 'Please enter a valid email address';
                }
                return null;
              },
            ),
            ElevatedButton(
              onPressed: _validateInputs,
              child: Text('Submit'),
            )
          ],
        ),
      ),
    );
  }
}

这个示例展示了如何创建一个简单的登录界面,并利用validated插件对用户输入的电子邮件地址进行格式验证。如果输入无效,则会显示错误消息;否则,应用程序将处理提交的数据。


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

1 回复

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


当然,validated 是一个流行的 Flutter 插件,用于简化表单验证过程。以下是一个使用 validated 插件进行表单验证的示例代码。

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

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

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

接下来是一个完整的 Flutter 应用示例,展示了如何使用 validated 插件进行表单验证:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Flutter Form Validation Example'),
        ),
        body: Padding(
          padding: const EdgeInsets.all(16.0),
          child: MyForm(),
        ),
      ),
    );
  }
}

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

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

  @override
  void initState() {
    super.initState();

    _emailController = ValidatedController(
      onChanged: (value) {
        if (value.isEmpty) {
          return 'Email is required.';
        } else if (!RegExp(r"^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$").hasMatch(value)) {
          return 'Please enter a valid email address.';
        }
        return null;
      },
    );

    _passwordController = ValidatedController(
      minLength: 6,
      maxLength: 20,
      onChanged: (value) {
        if (value.isEmpty) {
          return 'Password is required.';
        }
        return null;
      },
    );
  }

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

  @override
  Widget build(BuildContext context) {
    return Form(
      key: _formKey,
      child: Column(
        crossAxisAlignment: CrossAxisAlignment.start,
        children: <Widget>[
          TextFormField(
            controller: _emailController.textEditingController,
            decoration: InputDecoration(labelText: 'Email'),
            validator: (value) => _emailController.errorText,
          ),
          SizedBox(height: 16),
          TextFormField(
            controller: _passwordController.textEditingController,
            decoration: InputDecoration(labelText: 'Password'),
            obscureText: true,
            validator: (value) => _passwordController.errorText,
          ),
          SizedBox(height: 16),
          ElevatedButton(
            onPressed: () async {
              if (_formKey.currentState!.validate()) {
                // 如果所有验证通过,这里可以提交表单
                print('Form submitted successfully');
                // 清除错误(如果有)
                _emailController.clearError();
                _passwordController.clearError();
              }
            },
            child: Text('Submit'),
          ),
        ],
      ),
    );
  }
}

在这个示例中,我们创建了两个 ValidatedController 对象,一个用于电子邮件输入,另一个用于密码输入。每个控制器都有一个 onChanged 回调函数,用于动态验证输入值。如果输入值无效,该函数将返回一个错误消息;否则返回 null

TextFormField 组件使用这些控制器,并通过 validator 属性显示相应的错误消息。ElevatedButtononPressed 回调检查表单的整体验证状态,如果所有字段都通过验证,则执行提交操作。

通过这种方式,validated 插件大大简化了表单验证的逻辑,使代码更加简洁和易于维护。

回到顶部