diff --git a/lib/providers/user_provider.dart b/lib/providers/user_provider.dart index d2d503d..605e8de 100644 --- a/lib/providers/user_provider.dart +++ b/lib/providers/user_provider.dart @@ -1,5 +1,4 @@ -import 'dart:io'; - +import 'package:collection/collection.dart'; import 'package:didvan/models/enums.dart'; import 'package:didvan/models/user.dart'; import 'package:didvan/models/view/alert_data.dart'; @@ -11,6 +10,10 @@ import 'package:didvan/utils/action_sheet.dart'; class UserProvider extends CoreProvier { late User user; + + static final List _radarMarkQueue = []; + static final List _newsMarkQueue = []; + Future setAndGetToken({String? newToken}) async { if (newToken == null) { final token = await StorageService.getValue(key: 'token'); @@ -29,7 +32,7 @@ class UserProvider extends CoreProvier { throw 'Getting user from API failed!'; } - Future setProfilePhoto(File file) async { + Future setProfilePhoto(dynamic file) async { appState = AppState.isolatedBusy; final RequestService service = RequestService(RequestHelper.updateUserProfile); @@ -94,4 +97,40 @@ class UserProvider extends CoreProvier { ), ); } + + static Future changeRadarMark(int id, bool value) async { + _radarMarkQueue.add(MapEntry(id, value)); + Future.delayed(const Duration(milliseconds: 500), () async { + final MapEntry? lastChange = + _radarMarkQueue.lastWhereOrNull((item) => item.key == id); + if (lastChange == null) return; + if (lastChange.value) { + final service = RequestService(RequestHelper.markRadar(id)); + if (value) { + await service.post(); + } else { + await service.delete(); + } + _radarMarkQueue.removeWhere((element) => element.key == id); + } + }); + } + + static Future changeNewsMark(int id, bool value) async { + _newsMarkQueue.add(MapEntry(id, value)); + Future.delayed(const Duration(milliseconds: 500), () async { + final MapEntry? lastChange = + _newsMarkQueue.lastWhereOrNull((item) => item.key == id); + if (lastChange == null) return; + if (lastChange.value) { + final service = RequestService(RequestHelper.markNews(id)); + if (value) { + await service.post(); + } else { + await service.delete(); + } + _newsMarkQueue.removeWhere((element) => element.key == id); + } + }); + } }