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

在这里插入图片描述

Flutter for OpenHarmony:darq 让 Dart 拥有 C# LINQ 般的超能力(集合查询与变换神器) 深度解析与鸿蒙适配指南

前言

如果你是从 .NET/C# 转到 Dart/Flutter 开发的,你一定无比怀念 LINQ (Language Integrated Query)
虽然 Dart 的 Iterable 提供了 map, where, reduce 等基础方法,但在处理复杂数据集合(如多重排序、连接 Join、分组 GroupBy、去重)时,原生 API 依然显得力不从心,代码往往显得冗长且难以阅读。

darq 正是为此而生。它为 Dart 的 Iterable 添加了 60+ 个强大的扩展方法,完美复刻了 .NET LINQ 的体验。

对于 OpenHarmony 应用开发,前端往往需要处理来自后端的复杂 JSON 列表数据。使用 darq 可以在前端轻松完成类似于 SQL 的数据筛选与聚合,减轻 UI 层的逻辑负担。

一、核心功能概览

darq 的核心在于 Extension Methods。只需引入库,你的 List/Set/Iterable 就会瞬间多出几十种方法。

功能分类 常用方法 描述
筛选 distinct, distinctBy 强大的去重,支持自定义 Key。
排序 orderBy, thenBy, orderByDescending 多级排序(先按年龄排,再按姓名排)。
集合运算 union, intersect, except 并集、交集、差集。
分组聚合 groupBy, aggregate 类似于 SQL 的 Group By。
连接 join, groupJoin 类似于 SQL 的 Inner/Left Join。
统计 average, sum, count 数值统计。

darq 链式调用

原始 List

Where 过滤

OrderBy 排序

Select 映射

Distinct 去重

最终结果

二、OpenHarmony 适配说明

darq 是纯 Dart 逻辑库,不依赖任何平台特定 API(如 dart:io 或 dart:html)。
因此,它在 OpenHarmony 做到了100% 完美兼容,无需任何额外配置,直接在 pubspec.yaml 引入即可。

它特别适合鸿蒙上的以下场景:

  1. 电商应用:商品列表的多条件筛选与排序。
  2. 数据报表:本地计算总销售额、平均值等。
  3. 通讯录:按首字母分组 (groupBy) 联系人。

三、基础用例

3.1 多级排序 (Multi-level Sorting)

原生 Dart sort 很难写多级排序,darq 极其优雅:

import 'package:darq/darq.dart';

class Person {
  final String name;
  final int age;
  Person(this.name, this.age);
   String toString() => '$name($age)';
}

void main() {
  var list = [
    Person('Bob', 20),
    Person('Alice', 20),
    Person('Charlie', 30),
  ];

  // 先按年龄升序,年龄相同的按名字降序
  var result = list.orderBy((p) => p.age)
                   .thenByDescending((p) => p.name);
                   
  print(result); // (Alice(20), Bob(20), Charlie(30))
}

在这里插入图片描述

3.2 集合交集与差集

void setOperations() {
  var listA = [1, 2, 3, 4];
  var listB = [3, 4, 5, 6];

  // 交集
  print(listA.intersect(listB)); // (3, 4)
  
  // 差集 (A 有但 B 没有)
  print(listA.except(listB)); // (1, 2)
}

在这里插入图片描述

3.3 复杂去重 (DistinctBy)

void distinctExample() {
  var records = [
    {'id': 1, 'val': 'a'},
    {'id': 2, 'val': 'b'},
    {'id': 1, 'val': 'c'}, // ID 重复
  ];

  // 按 ID 去重,保留第一个
  var unique = records.distinct((r) => r['id']);
  print(unique); // ({id: 1, val: a}, {id: 2, val: b})
}

在这里插入图片描述

四、完整实战示例:鸿蒙电商商品筛选

假设我们从服务器拉取了一个乱序的商品列表,需要在客户端实现:

  1. 过滤掉下架商品。
  2. 按类别分组。
  3. 每组内按价格从低到高排序。
  4. 计算每个类别的平均价格。
import 'package:darq/darq.dart';

class Product {
  final String name;
  final String category;
  final double price;
  final bool isAvailable;

  Product(this.name, this.category, this.price, this.isAvailable);

  
  String toString() => '$name: ¥$price';
}

void main() {
  // 1. 模拟原始数据
  final products = [
    Product('Mate 60', 'Phone', 6999, true),
    Product('Pura 70', 'Phone', 5999, true),
    Product('Old Phone', 'Phone', 2999, false), // 下架
    Product('FreeBuds', 'Audio', 899, true),
    Product('Sound X', 'Audio', 1999, true),
    Product('Watch GT', 'Wearable', 1488, true),
  ];

  print('=== 原始数据 ===');
  products.forEach(print);

  // 2. 使用 darq 进行复杂查询
  var query = products
      // Step A: 过滤下架商品
      .where((p) => p.isAvailable)
      // Step B: 按价格排序
      .orderBy((p) => p.price)
      // Step C: 按类别分组
      .groupBy((p) => p.category);

  print('\n=== 处理结果 (按类别分组且已排序) ===');
  
  for (var group in query) {
    // group.key 是类别名,group 是该类别下的商品 Iterable
    // Step D: 计算分组平均价
    var avgPrice = group.average((p) => p.price);
    
    print('\n📂 类别: ${group.key}');
    print('   平均价: ¥${avgPrice.toStringAsFixed(2)}');
    print('   商品列表:');
    for (var p in group) {
      print('   - ${p.name}${p.price})');
    }
  }

  // 3. 额外功能:获取最贵的商品
  var mostExpensive = products.where((p) => p.isAvailable)
                              .orderByDescending((p) => p.price)
                              .firstOrDefault();
  
  print('\n🏆 最贵的在售商品: ${mostExpensive?.name}${mostExpensive?.price})');
}

在这里插入图片描述

五、总结

darq 是那种“一旦用了就回不去”的库。它极大地提升了 Dart 集合操作的表达力,让代码逻辑从“命令式”(怎么循环、怎么判断)转变为“声明式”(我要什么数据)。

对于 OpenHarmony 应用中的数据驱动型 UI(如列表页、Dashboard),使用 darq 能显著减少样板代码,让业务逻辑清晰得像在读说明书。强烈推荐将其纳入你的鸿蒙开发标准库中。

Logo

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

更多推荐