Flutter Future<List<StatsReport>> 数据类型解析

本文讲述了在Flutter中如何处理获取到的嵌套Future<List>类型的统计数据,作者详细展示了获取peercon stats、遍历报告并解析values的过程。

flutter 中遇到 Future<List> 这种future嵌套的数据解析,尝试了一些方法 最后解析过程

      var reports = await peercon?.getStats();
        reports?.forEach((report) {
          StatsReport reportDetail = report;
          print("-----------");
          print(reportDetail.values);
        });
Flutter 中对 `List<Map<String, dynamic>>` 类型的数据进行去重,通常需要根据某个字段或多个字段的组合来判断重复项。由于 `Map` 是引用类型,直接使用 `Set` 或 `contains` 方法无法有效识别逻辑上相同的 `Map` 对象。 ### 基于字段值的去重策略 可以通过 `fold` 或 `reduce` 方法实现基于字段值的去重。以下是一个示例,假设我们希望根据 `id` 字段去重: ```dart List<Map<String, dynamic>> list = [ {'id': 1, 'name': 'Alice'}, {'id': 2, 'name': 'Bob'}, {'id': 1, 'name': 'Alice'}, {'id': 3, 'name': 'Charlie'}, ]; List<Map<String, dynamic>> uniqueList = list.fold([], (List<Map<String, dynamic>> acc, item) { if (!acc.any((map) => map['id'] == item['id'])) { acc.add(item); } return acc; }); ``` 此方法通过遍历原始列表,并检查累积器中是否已存在相同 `id` 的条目,确保最终结果中的每个 `id` 都是唯一的[^1]。 ### 使用自定义对象简化操作 如果数据结构较为复杂,或者需要频繁执行去重操作,可以考虑将 `Map` 封装为自定义类,并重写 `==` 运算符和 `hashCode` 方法,以便使用 `Set` 实现自动去重: ```dart class Person { final int id; final String name; Person(this.id, this.name); @override bool operator ==(Object other) => identical(this, other) || (other is Person && runtimeType == other.runtimeType && id == other.id); @override int get hashCode => id.hashCode; } void main() { List<Person> people = [ Person(1, 'Alice'), Person(2, 'Bob'), Person(1, 'Alice'), Person(3, 'Charlie'), ]; Set<Person> uniquePeople = Set.from(people); print(uniquePeople); // 输出:{Person(1, Alice), Person(2, Bob), Person(3, Charlie)} } ``` 在此示例中,通过重写 `==` 和 `hashCode`,使 `Set` 能够正确识别并排除重复的 `Person` 实例[^1]。 ### 利用第三方库优化性能 对于大规模数据集,手动实现去重可能效率较低。可以使用 `equatable` 等第三方库简化 `==` 和 `hashCode` 的实现,同时提高代码可读性和性能: ```yaml dependencies: equatable: ^2.0.5 ``` 结合 `equatable`,可以轻松实现高效的去重逻辑: ```dart import 'package:equatable/equatable.dart'; class Person extends Equatable { final int id; final String name; Person(this.id, this.name); @override List<Object?> get props => [id]; } void main() { List<Person> people = [ Person(1, 'Alice'), Person(2, 'Bob'), Person(1, 'Alice'), Person(3, 'Charlie'), ]; Set<Person> uniquePeople = Set.from(people); print(uniquePeople); // 输出:{Person(1, Alice), Person(2, Bob), Person(3, Charlie)} } ``` 借助 `Equatable`,无需手动编写 `==` 和 `hashCode`,即可获得高效且可靠的去重能力。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值