Flutter插件eskema的介绍与使用

Flutter插件eskema的介绍与使用

Flutter插件eskema简介

eskema 是一个用于验证动态数据的强大工具,它提供了简单而强大的API。最初的设计目的是验证从API返回的动态JSON、用户输入的数据或其他需要动态数据验证的场景。不过,它不仅限于JSON数据,还可以验证任何类型的动态数据。


Flutter插件eskema功能

Flutter插件eskema特性

  • 简单的API:易于使用和理解。
  • 可组合/可扩展:可以轻松地组合和扩展。
  • 安全:确保数据的正确性和完整性。
  • 完全测试:经过全面测试以保证稳定性。

开始使用Flutter插件eskema

要使用该插件,只需将其添加到 pubspec.yaml 文件中:

dependencies:
  eskema: ^最新版本号

然后运行 flutter pub get 即可。


核心概念

验证器 (Validator)

eskema 中的大多数功能都是基于 验证器 的,它们是接受一个值并返回一个结果的函数。

示例验证器:

isType<String>();
listOfLength(2);
listEach(isType<String>());
all([isType<List>(), isListOfLength(2)]);

验证结果 (IResult)

这是一个表示验证结果的类。


使用方法

简单示例

注意:如果只需要验证单一值,可能并不需要使用 eskema

单独使用验证器:

final isString = isType<String>();
const result1 = isString('valid string');
const result2 = isString(123);

result1.isValid;  // true
result2.isValid;  // false
result2.expected; // String

组合验证器:

all([isType<String>(), isDate()]);     // 所有验证器必须有效
or(isType<String>(), isType<int>());   // 至少一个验证器必须有效
and(isType<String>(), isType<int>());  // 所有验证器必须有效

// 验证一个列表,长度为2,且每个元素是字符串或null
all([
  isOfLength(2),                    // 检查列表长度是否为2
  listEach(isTypeOrNull<String>()), // 检查每个元素是否是字符串或null
  listContains('test'),             // 列表必须包含值'test'
]);

// 验证一个映射是否符合某个eskema
final matchesEskema = eskema({
  'books': listEach(
    eskema({
      'name': isType<String>(),
    }),
  ),
});
matchesEskema({'books': [{'name': 'book name'}]});

验证器详解

类型验证 (isType<T>)

检查值是否为某种类型:

isType<String>();
isType<int>();
isType<double>();
isType<List>();
isType<Map>();

类型或空值验证 (isTypeOrNull<T>)

检查值是否为某种类型或null:

isTypeOrNull<String>();
isTypeOrNull<int>();

允许空值 (nullable)

允许验证器接受null值:

nullable(eskema({...}));

例如:

nullable(eskema({...})); // 允许map或null

验证映射 (eskema)

最常见的用例是验证JSON或动态映射。使用 eskema 验证器:

final validateMap = eskema({
  'name': isType<String>(),
  'address': nullable(
    eskema({
      'city': isType<String>(),
      'street': isType<String>(),
      'number': all([
        isType<int>(),
        isMin(0),
      ]),
      'additional': nullable(
        eskema({
          'doorbel_number': Field([isType<int>()])
        })
      ),
    })
  )
});

final invalidResult = validateMap.call({});
invalidResult.isValid;    // false
invalidResult.isNotValid; // true
invalidResult.expected;   // name -> String
invalidResult.message;    // Expected name -> String

final validResult = validateMap.call({'name': 'bobby'});
validResult.isValid;    // true
validResult.isNotValid; // false
validResult.expected;   // Valid

验证列表 (listEach)

验证动态列表的常见用例。使用 listEach

final isValidList = all([
    listOfLength(2),
    listEach(isType<int>()),
]);

isValidList.validate(null).isValid;      // true
isValidList.validate([]).isValid;        // true
isValidList.validate([1, 2]).isValid;    // true
isValidList.validate([1, "2"]).isValid;  // false
isValidList.validate([1, "2"]).expected; // [1] -> int

自定义验证器

eskema 提供了一些常见的验证器,但你可以轻松创建自定义验证器。例如,验证字符串是否匹配正则表达式:

Validator validateRegexp(RegExp regexp) {
  return (value) {
    return Result(
      isValid: regexp.hasMatch(value),  
      expected: 'match pattern $regexp', // 解释此验证器期望什么
    );
  };
}

更多关于Flutter插件eskema的介绍与使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter插件eskema的介绍与使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


eskema 是一个Flutter插件,但目前关于它的文档和社区资源相对较少,因此它的具体功能和潜在用途可能需要通过阅读源码或实验来探索。以下是一些基于插件名称和常见Flutter插件功能的推测,以及可能的潜在使用场景:


1. 插件名称推测

  • "Eskema" 可能是 “Schema”(模式、架构)的变体。因此,该插件可能与数据结构、模式验证或数据转换相关。

2. 潜在功能推测

  • 数据验证:可能用于验证数据结构是否符合特定模式(如JSON Schema)。
  • 数据转换:可能用于在不同数据格式之间进行转换(如JSON到Dart对象)。
  • 数据生成:可能根据模式生成随机数据或模拟数据。
  • 表单验证:可能与Flutter表单结合,提供动态表单生成和验证功能。

3. 潜在使用场景

  • API 数据验证:在从API获取数据时,使用 eskema 验证数据是否符合预期模式。
  • 动态表单生成:根据模式生成动态表单,并自动验证用户输入。
  • 测试数据生成:在测试中,使用 eskema 生成符合特定模式的模拟数据。
  • 数据序列化和反序列化:在本地存储或网络传输中,使用 eskema 进行数据转换。

4. 探索插件的方法

  • 阅读源码:查看插件的源码,了解其核心功能和实现方式。
  • 查看示例:如果插件提供了示例代码,运行并分析其行为。
  • 联系作者:如果插件有明确的作者或维护者,可以通过GitHub或其他渠道联系以获取更多信息。
  • 社区讨论:在Flutter社区(如Reddit、Stack Overflow)中询问是否有其他开发者使用过该插件。

5. 示例代码(假设功能)

如果 eskema 是一个数据验证插件,可能的使用方式如下:

import 'package:eskema/eskema.dart';

void main() {
  final schema = {
    'type': 'object',
    'properties': {
      'name': {'type': 'string'},
      'age': {'type': 'number'},
    },
    'required': ['name'],
  };

  final validator = EskemaValidator(schema);
  final data = {'name': 'John', 'age': 30};

  if (validator.validate(data)) {
    print('Data is valid!');
  } else {
    print('Data is invalid: ${validator.errors}');
  }
}
回到顶部