didvan-app/lib/pages/home/news/news_state.dart

61 lines
1.5 KiB
Dart

import 'package:didvan/models/enums.dart';
import 'package:didvan/models/news_overview.dart';
import 'package:didvan/providers/core_provider.dart';
import 'package:didvan/services/network/request.dart';
import 'package:didvan/services/network/request_helper.dart';
class NewsState extends CoreProvier {
bool isFiltering = false;
String? search;
String? lastSearch;
String? startDate;
String? endDate;
final List<NewsOverview> news = [];
void resetFilters() {
startDate = null;
endDate = null;
getNews(page: 1);
}
Future<void> getNews({
required int page,
}) async {
if (search != '' && search != null || filterApplied) {
lastSearch = search;
isFiltering = true;
news.clear();
} else {
isFiltering = false;
}
lastSearch = search;
appState = AppState.busy;
final service = RequestService(
RequestHelper.newsOverviews(
page: 1,
startDate: startDate?.split(' ').first,
endDate: endDate?.split(' ').first,
search: search,
),
);
await service.httpGet();
if (service.isSuccess) {
final newsList = service.result['news'];
for (var i = 0; i < newsList.length; i++) {
news.add(NewsOverview.fromJson(newsList[i]));
}
appState = AppState.idle;
return;
}
appState = AppState.failed;
}
Future<void> markNews(int id) async {
final service = RequestService(RequestHelper.markNews(id));
await service.post();
}
bool get filterApplied => startDate != null || endDate != null;
}