This commit is contained in:
88
lib/providers/MediaProvider.dart
Normal file
88
lib/providers/MediaProvider.dart
Normal file
@ -0,0 +1,88 @@
|
||||
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;
|
||||
final List<MediaItem> _mediaItems = [];
|
||||
bool _isLoading = false;
|
||||
|
||||
List<String> types = ["alles", "image", "video", "audio"];
|
||||
List<String> 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<MediaItem> 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<MediaItem> mediaItems) {
|
||||
_mediaItems.clear();
|
||||
addMediaItems(mediaItems);
|
||||
notifyListeners();
|
||||
}
|
||||
|
||||
void addMediaItems(List<MediaItem> newItems) {
|
||||
_mediaItems.addAll(newItems);
|
||||
notifyListeners();
|
||||
}
|
||||
|
||||
Future<void> loadMedia({bool reload = false}) async {
|
||||
if (_isLoading) return;
|
||||
_isLoading = true;
|
||||
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;
|
||||
notifyListeners();
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user