import 'package:f0ckapp/services/Api.dart'; import 'package:flutter/material.dart'; import 'package:f0ckapp/models/MediaItem.dart'; class MediaProvider extends ChangeNotifier { int _typeid = 0; int _mode = 0; bool _random = false; String? _tag; int _crossAxisCount = 0; List _mediaItems = []; bool _isLoading = false; List types = ["alles", "image", "video", "audio"]; List modes = ["sfw", "nsfw", "untagged", "all"]; String get type => types[_typeid]; int get typeid => _typeid; int get mode => _mode; bool get random => _random; String? get tag => _tag; int get crossAxisCount => _crossAxisCount; List get mediaItems => _mediaItems; bool get isLoading => _isLoading; void setType(String type) { _typeid = types.indexOf(type); loadMedia(reload: true); } void setMode(int mode) { _mode = mode; loadMedia(reload: true); } void toggleRandom() { _random = !_random; loadMedia(reload: true); } void setTag(String? tag) { _tag = tag; loadMedia(reload: true); } void setCrossAxisCount(int crossAxisCount) { _crossAxisCount = crossAxisCount; notifyListeners(); } void setMediaItems(List mediaItems) { if (_mediaItems != mediaItems) { _mediaItems = mediaItems; notifyListeners(); } } void addMediaItems(List newItems) { _mediaItems.addAll(newItems); notifyListeners(); } Future loadMedia({bool reload = false, bool notify = true}) async { if (_isLoading) return; _isLoading = true; if (notify) notifyListeners(); try { final newMedia = await fetchMedia( older: reload ? null : _mediaItems.isNotEmpty ? _mediaItems.last.id : null, type: type, mode: mode, random: random, tag: tag, ); reload ? setMediaItems(newMedia) : addMediaItems(newMedia); } catch (e) { debugPrint('Fehler beim Laden der Medien: $e'); } finally { _isLoading = false; if(notify) notifyListeners(); } } }