diffTrophyContent method

List<Map<String, dynamic>> diffTrophyContent(
  1. String newContent
)

对比 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;
}