D1APP-39 news completed

This commit is contained in:
MohammadTaha Basiri 2022-01-20 18:26:05 +03:30
parent 01fcaec288
commit e642d58e46
1 changed files with 36 additions and 7 deletions

View File

@ -1,3 +1,4 @@
import 'package:collection/collection.dart';
import 'package:didvan/models/enums.dart';
import 'package:didvan/models/news_overview.dart';
import 'package:didvan/providers/core_provider.dart';
@ -6,11 +7,12 @@ import 'package:didvan/services/network/request_helper.dart';
class NewsState extends CoreProvier {
bool isFiltering = false;
String? search;
String? lastSearch;
String search = '';
String lastSearch = '';
String? startDate;
String? endDate;
final List<MapEntry> _markQueue = [];
final List<NewsOverview> news = [];
void resetFilters() {
@ -22,21 +24,21 @@ class NewsState extends CoreProvier {
Future<void> getNews({
required int page,
}) async {
if (search != '' && search != null || filterApplied) {
if (search != '' || filterApplied) {
lastSearch = search;
isFiltering = true;
news.clear();
} else {
isFiltering = false;
}
lastSearch = search;
appState = AppState.busy;
news.clear();
final service = RequestService(
RequestHelper.newsOverviews(
page: 1,
startDate: startDate?.split(' ').first,
endDate: endDate?.split(' ').first,
search: search,
search: search == '' ? null : search,
),
);
await service.httpGet();
@ -52,8 +54,35 @@ class NewsState extends CoreProvier {
}
Future<void> markNews(int id) async {
final service = RequestService(RequestHelper.markNews(id));
await service.post();
news.firstWhere((element) => element.id == id).marked = true;
notifyListeners();
_markQueue.add(MapEntry(id, true));
Future.delayed(const Duration(milliseconds: 500), () async {
final MapEntry? lastChange =
_markQueue.lastWhereOrNull((item) => item.key == id);
if (lastChange == null) return;
if (lastChange.value) {
final service = RequestService(RequestHelper.markNews(id));
await service.post();
_markQueue.removeWhere((element) => element.key == id);
}
});
}
Future<void> unMarkNews(int id) async {
news.firstWhere((element) => element.id == id).marked = false;
notifyListeners();
_markQueue.add(MapEntry(id, false));
Future.delayed(const Duration(milliseconds: 500), () async {
final MapEntry? lastChange =
_markQueue.lastWhereOrNull((item) => item.key == id);
if (lastChange == null) return;
if (!lastChange.value) {
final service = RequestService(RequestHelper.markNews(id));
await service.delete();
_markQueue.removeWhere((element) => element.key == id);
}
});
}
bool get filterApplied => startDate != null || endDate != null;