diffTrophyContent method
对比 trophy task 新旧数据,返回变化项(count 增加或新增的项) 首次调用仅初始化快照,返回空列表(不触发动画)
Implementation
List<Map<String, dynamic>> diffTrophyContent(String newContent) {
final typed = _parseTrophyContent(newContent);
if (_lastTrophySnapshot == null) {
_lastTrophySnapshot =
typed.map((e) => Map<String, dynamic>.from(e)).toList();
return [];
}
final diff = <Map<String, dynamic>>[];
for (final item in typed) {
final old = _lastTrophySnapshot!.cast<Map<String, dynamic>>().firstWhere(
(e) => e['userId'] == item['userId'],
orElse: () => <String, dynamic>{},
);
if (old.isEmpty || (item['count'] as int) > (old['count'] as int)) {
diff.add(item);
}
}
_lastTrophySnapshot =
typed.map((e) => Map<String, dynamic>.from(e)).toList();
return diff;
}