v1.1.11+41
All checks were successful
Flutter Schmutter / build (push) Successful in 3m57s

- fixed: duplicates on the frontpage
- new: search by tag
This commit is contained in:
2025-06-10 08:39:55 +02:00
parent e945844151
commit c35308fbc1
11 changed files with 187 additions and 35 deletions

View File

@ -56,13 +56,13 @@ class _DetailViewState extends ConsumerState<DetailView> {
try {
await ref.read(mediaProvider.notifier).loadMedia();
} catch (e) {
_showError("Fehler beim Laden der Medien: $e");
_showMsg("Fehler beim Laden der Medien: $e");
} finally {
setState(() => isLoading = false);
}
}
void _showError(String message) {
void _showMsg(String message) {
if (!mounted) return;
ScaffoldMessenger.of(context)
..removeCurrentSnackBar()
@ -70,15 +70,15 @@ class _DetailViewState extends ConsumerState<DetailView> {
}
Future<void> _downloadMedia() async {
final mediaState = ref.read(mediaProvider);
final currentItem = mediaState.mediaItems[_currentIndex];
final MediaState mediaState = ref.read(mediaProvider);
final MediaItem currentItem = mediaState.mediaItems[_currentIndex];
if (Platform.isAndroid || Platform.isIOS) {
var status = await Permission.storage.status;
PermissionStatus status = await Permission.storage.status;
if (!status.isGranted) {
status = await Permission.storage.request();
if (!status.isGranted) {
_showError("Speicherberechtigung wurde nicht erteilt.");
_showMsg("Speicherberechtigung wurde nicht erteilt.");
return;
}
}
@ -86,17 +86,17 @@ class _DetailViewState extends ConsumerState<DetailView> {
String localPath;
if (Platform.isAndroid) {
final directory = await getExternalStorageDirectory();
final Directory? directory = await getExternalStorageDirectory();
localPath = "${directory!.path}/Download/fApp";
} else if (Platform.isIOS) {
final directory = await getApplicationDocumentsDirectory();
final Directory directory = await getApplicationDocumentsDirectory();
localPath = directory.path;
} else {
final directory = await getTemporaryDirectory();
final Directory directory = await getTemporaryDirectory();
localPath = directory.path;
}
final savedDir = Directory(localPath);
final Directory savedDir = Directory(localPath);
if (!await savedDir.exists()) {
await savedDir.create(recursive: true);
}
@ -111,10 +111,10 @@ class _DetailViewState extends ConsumerState<DetailView> {
);
if (mounted) {
_showError('Download gestartet: ${currentItem.mediaUrl}');
_showMsg('Download gestartet: ${currentItem.mediaUrl}');
}
} catch (e) {
_showError('Download fehlgeschlagen: $e');
_showMsg('Download fehlgeschlagen: $e');
}
}
@ -126,11 +126,10 @@ class _DetailViewState extends ConsumerState<DetailView> {
@override
Widget build(BuildContext context) {
final mediaState = ref.watch(mediaProvider);
final MediaState mediaState = ref.watch(mediaProvider);
final int itemIndex = mediaState.mediaItems.indexWhere(
(item) => item.id == widget.initialItemId,
);
print('itemIndex: ${itemIndex}; initial: ${widget.initialItemId}');
if (itemIndex == -1) {
Future.microtask(() {
@ -168,7 +167,7 @@ class _DetailViewState extends ConsumerState<DetailView> {
IconButton(
icon: const Icon(Icons.fullscreen),
onPressed: () {
_showError('download ist wip');
_showMsg('fullscreen ist wip');
},
),
IconButton(
@ -261,7 +260,7 @@ class _DetailViewState extends ConsumerState<DetailView> {
}
Widget _buildMediaItem(MediaItem item, bool isActive) {
final mediaNotifier = ref.read(mediaProvider.notifier);
final MediaNotifier mediaNotifier = ref.read(mediaProvider.notifier);
return SingleChildScrollView(
child: Column(

View File

@ -7,6 +7,7 @@ import 'package:go_router/go_router.dart';
import 'package:f0ckapp/providers/media_provider.dart';
import 'package:f0ckapp/utils/appversion_util.dart';
import 'package:f0ckapp/providers/theme_provider.dart';
import 'package:f0ckapp/utils/customsearchdelegate_util.dart';
const List<String> mediaTypes = ["alles", "image", "video", "audio"];
const List<String> mediaModes = ["sfw", "nsfw", "untagged", "all"];
@ -78,6 +79,17 @@ class _MediaGridState extends ConsumerState<MediaGrid> {
},
),
actions: [
IconButton(
icon: Icon(Icons.search),
onPressed: () {
showSearch(
context: context,
delegate: CustomSearchDelegate(),
);
//mediaNotifier.setTag('drachenlord');
//_scrollController.jumpTo(0);
},
),
IconButton(
icon: Icon(
mediaState.random ? Icons.shuffle_on_outlined : Icons.shuffle,