mark & unmark functions moved to user provider

This commit is contained in:
MohammadTaha Basiri 2022-01-29 13:58:56 +03:30
parent 14c79edc7b
commit fdbbc914af
1 changed files with 42 additions and 3 deletions

View File

@ -1,5 +1,4 @@
import 'dart:io'; import 'package:collection/collection.dart';
import 'package:didvan/models/enums.dart'; import 'package:didvan/models/enums.dart';
import 'package:didvan/models/user.dart'; import 'package:didvan/models/user.dart';
import 'package:didvan/models/view/alert_data.dart'; import 'package:didvan/models/view/alert_data.dart';
@ -11,6 +10,10 @@ import 'package:didvan/utils/action_sheet.dart';
class UserProvider extends CoreProvier { class UserProvider extends CoreProvier {
late User user; late User user;
static final List<MapEntry> _radarMarkQueue = [];
static final List<MapEntry> _newsMarkQueue = [];
Future<String?> setAndGetToken({String? newToken}) async { Future<String?> setAndGetToken({String? newToken}) async {
if (newToken == null) { if (newToken == null) {
final token = await StorageService.getValue(key: 'token'); final token = await StorageService.getValue(key: 'token');
@ -29,7 +32,7 @@ class UserProvider extends CoreProvier {
throw 'Getting user from API failed!'; throw 'Getting user from API failed!';
} }
Future<bool> setProfilePhoto(File file) async { Future<bool> setProfilePhoto(dynamic file) async {
appState = AppState.isolatedBusy; appState = AppState.isolatedBusy;
final RequestService service = final RequestService service =
RequestService(RequestHelper.updateUserProfile); RequestService(RequestHelper.updateUserProfile);
@ -94,4 +97,40 @@ class UserProvider extends CoreProvier {
), ),
); );
} }
static Future<void> 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<void> 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);
}
});
}
} }