Flutter逻辑验证插件certlogic_dart的使用

Flutter逻辑验证插件certlogic_dart的使用

certlogic_dart 是一个用于在Dart(包括Flutter)中实现 CertLogic 规范的库。CertLogic 是一种以JSON格式表示业务或验证规则的标准。它是在 JsonLogic 基础上扩展而成,并包含一些必要的自定义操作,例如处理日期。CertLogic 是欧盟数字新冠证书(Digital COVID Certificate)项目的一部分,用于定义可互换的验证规则。

安装

要安装 certlogic_dart 包,可以在项目的 pubspec.yaml 文件中添加以下依赖项:

dependencies:
  certlogic_dart: ^1.3.1

然后运行 flutter pub get 命令来获取该包。

示例

准备数据

首先,我们需要准备数据。这些数据通常包括你的DCC(数字新冠证书)以及一些外部信息,如值集和验证时间。

import 'package:certlogic_dart/certlogic_dart.dart';

void main() {
  final payload = {}; // 你的DCC数据
  final _valueSets = {}; // 由EU GW提供的值集

  final data = {
    'payload': payload, // 你的DCC
    'external': {
      'valueSets': _valueSets, // 由EU GW提供的值集
      'validationClock': DateTime.now().toIso8601String(), // 验证时间
    },
  };
}

评估单个规则

接下来,我们可以使用 CertLogic.evaluate 方法来评估单个规则。假设你有一个规则对象 rule,你可以这样评估:

bool result = await CertLogic.evaluate(rule.logic, data);
print('规则是否通过: $result');

评估一组规则并返回所有未通过的规则

如果你有一组规则,可以使用 mapwhereType 方法来找出哪些规则未通过:

List<ValidationRule>? failedRules = validationRules?.map((rule) {
  bool result = await CertLogic.evaluate(rule.logic, data);
  return result ? null : rule;
}).whereType<ValidationRule>().toList();

if (failedRules != null && failedRules.isNotEmpty) {
  print('未通过的规则: $failedRules');
} else {
  print('所有规则都通过了');
}

运行测试

为了确保一切正常工作,你可以运行测试。测试需要用到位于 specification 目录下的测试套件,该目录应该与你的项目在同一目录下。

dart test

测试输出应类似于以下内容:

00:01 +16: test/test_suite_test.dart: 验证测试套件
181 成功,0 失败
00:01 +17: 所有测试通过!

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

1 回复

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


certlogic_dart 是一个用于处理逻辑验证的 Dart 插件,通常用于验证基于 JSON 的逻辑表达式(如那些符合 CertLogic 规范的条件)。这个插件在 Flutter 应用中可以用来验证复杂的业务逻辑,特别是在处理证书验证(如 COVID-19 数字证书)时非常有用。

安装 cert_logic_dart

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

dependencies:
  cert_logic_dart: ^0.3.0

然后运行 flutter pub get 来获取依赖。

使用 cert_logic_dart

1. 导入包

在你的 Dart 文件中导入 cert_logic_dart

import 'package:cert_logic_dart/cert_logic_dart.dart';

2. 创建并解析 JSON 逻辑表达式

CertLogic 使用 JSON 格式的逻辑表达式。你可以创建一个 JSON 对象来表示你的逻辑表达式。

final logicExpression = {
  "if": [
    {"var": "payload.validity"},
    true,
    false
  ]
};

这个表达式的意思是,如果 payload.validitytrue,则返回 true,否则返回 false

3. 创建上下文

CertLogic 需要一个上下文对象来解析变量。上下文通常是一个包含数据的 JSON 对象。

final context = {
  "payload": {
    "validity": true
  }
};

4. 执行逻辑验证

使用 evaluate 方法执行逻辑验证:

final result = CertLogic.evaluate(logicExpression, context);
print(result); // 输出: true

示例:复杂的逻辑验证

假设你有一个更复杂的逻辑表达式,例如:

final complexLogicExpression = {
  "and": [
    {">=": [{"var": "payload.age"}, 18]},
    {"<": [{"var": "payload.temperature"}, 37.5]}
  ]
};

final context = {
  "payload": {
    "age": 20,
    "temperature": 37.2
  }
};

final result = CertLogic.evaluate(complexLogicExpression, context);
print(result); // 输出: true

在这个例子中,complexLogicExpression 验证了 payload.age 是否大于或等于 18,且 payload.temperature 是否小于 37.5。如果这两个条件都满足,则返回 true

处理错误

如果在解析或执行逻辑时发生错误,CertLogic.evaluate 会抛出一个异常。你可以使用 try-catch 块来处理这些错误。

try {
  final result = CertLogic.evaluate(invalidLogicExpression, context);
  print(result);
} catch (e) {
  print('Error evaluating logic: $e');
}
回到顶部