yumi-flutter/lib/shared/tools/sc_room_rocket_reward_popup_ack.dart

46 lines
1.2 KiB
Dart

import 'dart:async';
import 'package:yumi/shared/business_logic/models/res/sc_room_rocket_api_res.dart';
import 'package:yumi/shared/data_sources/sources/repositories/sc_room_repository_imp.dart';
class SCRoomRocketRewardPopupAck {
static final Set<String> _shownRecordIds = <String>{};
static List<SCRoomRocketRewardRecordRes> filterUnshownRecords(
List<SCRoomRocketRewardRecordRes> records,
) {
return records
.where((record) {
final id = record.id.trim();
return id.isEmpty || !_shownRecordIds.contains(id);
})
.toList(growable: false);
}
static List<String> recordIds(List<SCRoomRocketRewardRecordRes> records) {
final ids = <String>[];
final seen = <String>{};
for (final record in records) {
final id = record.id.trim();
if (id.isEmpty || !seen.add(id)) {
continue;
}
ids.add(id);
}
return ids;
}
static void markShownAndAck(List<SCRoomRocketRewardRecordRes> records) {
final ids = recordIds(records);
if (ids.isEmpty) {
return;
}
_shownRecordIds.addAll(ids);
unawaited(
SCChatRoomRepository()
.ackRoomRocketRewardPopups(ids)
.catchError((_) => false),
);
}
}