v1.4.8+69
All checks were successful
Flutter Schmutter / build (push) Successful in 3m39s

This commit is contained in:
2025-06-24 03:02:39 +02:00
parent 39fadc009f
commit ba7505c2b3
4 changed files with 144 additions and 85 deletions

View File

@ -14,6 +14,7 @@ class MediaController extends GetxController {
RxBool loading = false.obs;
RxBool atEnd = false.obs;
RxBool atStart = false.obs;
Rxn<String> errorMessage = Rxn<String>();
RxInt typeIndex = 0.obs;
RxInt modeIndex = 0.obs;
@ -22,12 +23,10 @@ class MediaController extends GetxController {
void setTypeIndex(int idx) {
typeIndex.value = idx;
fetchInitial();
}
void setModeIndex(int idx) {
modeIndex.value = idx;
fetchInitial();
}
void setTag(String? newTag, {bool reload = true}) {
@ -37,6 +36,10 @@ class MediaController extends GetxController {
}
}
void toggleRandom() {
random.value = random.value == 0 ? 1 : 0;
}
Future<List<Favorite>?> toggleFavorite(
MediaItem item,
bool isFavorite,
@ -51,6 +54,7 @@ class MediaController extends GetxController {
Future<Feed?> _fetchItems({int? older, int? newer}) async {
if (loading.value) return null;
loading.value = true;
errorMessage.value = null;
try {
return await _api.fetchItems(
older: older,
@ -61,11 +65,10 @@ class MediaController extends GetxController {
tag: tag.value,
);
} catch (e) {
Get.snackbar(
'Fehler beim Laden',
'Die Daten konnten nicht abgerufen werden. Wo Internet?',
snackPosition: SnackPosition.BOTTOM,
);
final String errorText =
'Die Daten konnten nicht abgerufen werden. Wo Internet?';
errorMessage.value = errorText;
Get.snackbar('Fehler beim Laden', errorText);
return null;
} finally {
loading.value = false;
@ -73,7 +76,7 @@ class MediaController extends GetxController {
}
Future<void> fetchInitial({int? id}) async {
final result = await _fetchItems(older: id);
final Feed? result = await _fetchItems(older: id);
if (result != null) {
items.assignAll(result.items);
atEnd.value = result.atEnd;
@ -83,7 +86,7 @@ class MediaController extends GetxController {
Future<void> fetchMore() async {
if (items.isEmpty || atEnd.value) return;
final result = await _fetchItems(older: items.last.id);
final Feed? result = await _fetchItems(older: items.last.id);
if (result != null) {
final Set<int> existingIds = items.map((e) => e.id).toSet();
final List<MediaItem> newItems = result.items
@ -95,10 +98,9 @@ class MediaController extends GetxController {
}
}
Future<int> fetchNewer() async {
if (items.isEmpty || atStart.value) return 0;
final oldLength = items.length;
final result = await _fetchItems(newer: items.first.id);
Future<void> fetchNewer() async {
if (items.isEmpty || atStart.value) return;
final Feed? result = await _fetchItems(newer: items.first.id);
if (result != null) {
final Set<int> existingIds = items.map((e) => e.id).toSet();
final List<MediaItem> newItems = result.items
@ -107,9 +109,8 @@ class MediaController extends GetxController {
items.insertAll(0, newItems);
items.refresh();
atStart.value = result.atStart;
return items.length - oldLength;
}
return 0;
return;
}
Future<void> handleRefresh() async {
@ -122,15 +123,11 @@ class MediaController extends GetxController {
}
Future<void> handleLoading() async {
if (loading.value) return;
if (!loading.value && !atEnd.value) {
await fetchMore();
}
}
void toggleRandom() {
random.value = random.value == 1 ? 0 : 1;
fetchInitial();
}
bool get isRandomEnabled => random.value == 1;
}