Flutter辅助工具插件dto_helpers的使用

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

Flutter辅助工具插件dto_helpers的使用

DTO(Data Transfer Objects) validators 包用于Dart语言。 支持所有平台。 dto_helpers 包为Dart应用程序中的Data Transfer Objects (DTOs) 提供了一套强大的验证器,确保各种数据类型的完整性,包括字符串、数字、枚举、布尔值和列表。

开始使用 🚀

通过将 dto_helpers 添加到依赖项列表来增强您的Flutter或Dart项目:

dependencies:
  ...
  dto_helpers:

特性 ✨

  • 字符串验证器:确保数据符合特定的字符串标准。
  • 列表验证器:验证列表大小和嵌套列表元素。
  • 数字验证器:确认数值数据的完整性、范围和符号。
  • 枚举验证器:检查数据是否匹配预定义的枚举值之一。
  • 布尔验证器:准确验证布尔值。

使用方法

要利用 dto_helpers,声明一个扩展了 DTOValidate 的DTO类。以下是一个 SignInDTO 的示例:

import 'package:dto_helpers/dto_helpers.dart';

class SignInDTO extends DTOValidate {
  late String name;
  int? signInCode;

  SignInDTO({required this.name, this.signInCode});

  // 工厂构造函数用于JSON反序列化
  factory SignInDTO.fromJson(dynamic json) {
    return SignInDTO(name: json['name'], signInCode: json['signInCode']);
  }

  // 调用此方法以创建空的DTO
  SignInDTO.empty();

  @override
  ValidationResult validate(dynamic json) {
    return super.validateAll([
      IsString(
        value: json['name'],
        propertyName: 'name' // 提供有意义的错误消息
      ),
      IsNumber(
        value: json['signInCode'],
        isOptional: true, // 表示可选字段
        propertyName: 'signInCode'
      )
    ]);
  }
}

// 示例使用:
final json = {'name': 'John Doe', 'signInCode': 12345}; // 来自网络请求的JSON
final ValidationResult validationResult = SignInDTO.empty().validate(json);
if (!validationResult.isValid) {
  throw Exception('验证错误 ${validationResult.message}');
}

SignInDTO signInDTO = SignInDTO.fromJson(json);

验证器

每个属性验证类如 IsStringIsNumberIsBooleanIsListIsEnum 可以按如下方式使用:

// 每个类都有一个名为 `validate` 的方法,该方法会根据给定的选项计算验证结果。

final result = IsString(value: qrCode).validate();
IsString

确保数据是字符串,并进行大量检查,例如电子邮件验证、URL检查、大小写敏感性等,以实现全面的字符串验证。

IsString(
    value,
    isOptional, // 如果值为空,则忽略验证
    isEmail,
    contains,
    notContains,
    isUrl,
    isAlpha,
    isAlphanumeric,
    isBase64,
    isCreditCard,
    isDate,
    isJSON,
    isLowercase,
    isUppercase,
    isUUID,
    isIP,
    isIn, // String[]
    maxLen,
    minLen,
    propertyName // 如果传递了 propertyName,则会在验证失败时构建一条消息
)
IsNumber

确保数值数据在特定范围内,并满足条件,例如正数或能被特定数字整除。

IsNumber(
    value,
    isOptional, // 如果值为空,则忽略验证
    propertyName, // 如果传递了 propertyName,则会在验证失败时构建一条消息
    isNegative,
    isPositive,
    isDivisibleBy,
    max,
    min
)
IsNumber(
  value: json['someNumber'],
  min: 0,
  max: 100,
  propertyName: 'someNumber'
)
IsEnum

验证提供的数据是否与指定的枚举值之一匹配。

enum UserRole { admin, user, guest }

IsEnum(
  value: json['role'],
  values: UserRole.values,
  propertyName: 'role'
)
IsBoolean

检查数据是否为布尔值。

IsBoolean(
  value: json['isActive'],
  propertyName: 'isActive'
)
IsList

确保提供的列表数据满足大小要求,并对每个元素应用额外的验证器。

IsList(
    value,
    maxSize,
    minSize,
    nested, // 此属性应为一个函数,应用于数组中的每个元素。函数应返回任何一种 `propertValidate` 类型,如 `IsString`, `IsNumber`, `IsBoolean`, `IsEnum` 或 `IsList`。请参见下面的示例
    isOptional, // 如果值为空,则忽略验证
    propertyName // 如果传递了 propertyName,则会在验证失败时构建一条消息
)

IsList(
  value: json['tags'],
  minSize: 1,
  nested: (element) => IsString(value: element, maxLen: 20),
  propertyName: 'tags'
)

更多关于Flutter辅助工具插件dto_helpers的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter辅助工具插件dto_helpers的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在Flutter开发中,dto_helpers 是一个辅助工具插件,主要用于简化数据传输对象(DTOs)的创建和操作。尽管具体的 dto_helpers 插件可能不是广为人知的第三方库(因为Flutter社区中有许多不同的工具和库,且库的状态和可用性可能随时间变化),但我可以展示一个类似功能的自定义实现,以及如何在Flutter项目中使用它来辅助DTO处理。

假设我们有一个简单的用户数据传输对象(User DTO),我们将创建一个帮助类来简化这个DTO的创建和操作。

1. 定义User类

首先,我们定义一个简单的 User 类,包含一些基本属性:

class User {
  final String id;
  final String name;
  final String email;

  User({required this.id, required this.name, required this.email});

  // 从Map转换为User对象
  factory User.fromJson(Map<String, dynamic> json) {
    return User(
      id: json['id'] as String,
      name: json['name'] as String,
      email: json['email'] as String,
    );
  }

  // 将User对象转换为Map
  Map<String, dynamic> toJson() {
    return {
      'id': id,
      'name': name,
      'email': email,
    };
  }
}

2. 创建DTO帮助类

接下来,我们创建一个帮助类 DtoHelpers,包含一些静态方法来简化DTO的操作。在这个例子中,我们将实现一个方法来从JSON列表创建 User 对象列表。

class DtoHelpers {
  // 从JSON列表创建User对象列表
  static List<User> listFromJson(List<Map<String, dynamic>> jsonList) {
    return jsonList.map((json) => User.fromJson(json)).toList();
  }

  // 将User对象列表转换为JSON列表
  static List<Map<String, dynamic>> listToJson(List<User> userList) {
    return userList.map((user) => user.toJson()).toList();
  }
}

3. 使用DtoHelpers

现在,我们可以在Flutter应用中使用 DtoHelpers 类来简化DTO的操作。例如,从网络API获取用户列表并转换为 User 对象列表,或者将用户列表转换为JSON格式以进行存储或传输。

void main() {
  // 示例JSON数据
  String jsonData = '''
  [
    {"id": "1", "name": "Alice", "email": "alice@example.com"},
    {"id": "2", "name": "Bob", "email": "bob@example.com"}
  ]
  ''';

  // 将JSON字符串转换为List<Map<String, dynamic>>
  List<Map<String, dynamic>> jsonList = jsonDecode(jsonData) as List<Map<String, dynamic>>;

  // 使用DtoHelpers从JSON列表创建User对象列表
  List<User> userList = DtoHelpers.listFromJson(jsonList);

  // 打印User对象列表
  userList.forEach((user) => print('User: ${user.name}, Email: ${user.email}'));

  // 将User对象列表转换为JSON列表
  List<Map<String, dynamic>> userJsonList = DtoHelpers.listToJson(userList);

  // 打印JSON列表
  print(jsonEncode(userJsonList));
}

总结

虽然这里没有直接使用名为 dto_helpers 的具体插件,但上述代码示例展示了如何在Flutter项目中创建一个自定义的帮助类来简化DTO的创建和操作。这种方法可以根据实际需求进行扩展,以适应更复杂的DTO结构和操作需求。如果你确实在寻找一个特定的 dto_helpers 插件,建议查阅其官方文档或GitHub仓库以获取更详细的使用指南和代码示例。

回到顶部