v1.1.10+40
All checks were successful
Flutter Schmutter / build (push) Successful in 3m56s

- download button lel
This commit is contained in:
2025-06-09 19:08:23 +02:00
parent 74eb6e3d26
commit e945844151
5 changed files with 119 additions and 6 deletions

View File

@ -6,6 +6,9 @@ import 'package:cached_network_image/cached_network_image.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:flutter_cache_manager/flutter_cache_manager.dart';
import 'package:go_router/go_router.dart';
import 'package:permission_handler/permission_handler.dart';
import 'package:flutter_downloader/flutter_downloader.dart';
import 'package:path_provider/path_provider.dart';
import 'package:share_plus/share_plus.dart';
import 'package:f0ckapp/models/mediaitem_model.dart';
@ -66,6 +69,55 @@ class _DetailViewState extends ConsumerState<DetailView> {
..showSnackBar(SnackBar(content: Text(message)));
}
Future<void> _downloadMedia() async {
final mediaState = ref.read(mediaProvider);
final currentItem = mediaState.mediaItems[_currentIndex];
if (Platform.isAndroid || Platform.isIOS) {
var status = await Permission.storage.status;
if (!status.isGranted) {
status = await Permission.storage.request();
if (!status.isGranted) {
_showError("Speicherberechtigung wurde nicht erteilt.");
return;
}
}
}
String localPath;
if (Platform.isAndroid) {
final directory = await getExternalStorageDirectory();
localPath = "${directory!.path}/Download/fApp";
} else if (Platform.isIOS) {
final directory = await getApplicationDocumentsDirectory();
localPath = directory.path;
} else {
final directory = await getTemporaryDirectory();
localPath = directory.path;
}
final savedDir = Directory(localPath);
if (!await savedDir.exists()) {
await savedDir.create(recursive: true);
}
try {
await FlutterDownloader.enqueue(
url: currentItem.mediaUrl,
savedDir: localPath,
fileName: currentItem.mediaUrl.split('/').last,
showNotification: true,
openFileFromNotification: true,
);
if (mounted) {
_showError('Download gestartet: ${currentItem.mediaUrl}');
}
} catch (e) {
_showError('Download fehlgeschlagen: $e');
}
}
@override
void dispose() {
_pageController?.dispose();
@ -78,6 +130,7 @@ class _DetailViewState extends ConsumerState<DetailView> {
final int itemIndex = mediaState.mediaItems.indexWhere(
(item) => item.id == widget.initialItemId,
);
print('itemIndex: ${itemIndex}; initial: ${widget.initialItemId}');
if (itemIndex == -1) {
Future.microtask(() {
@ -115,14 +168,12 @@ class _DetailViewState extends ConsumerState<DetailView> {
IconButton(
icon: const Icon(Icons.fullscreen),
onPressed: () {
_showError('fullscreen ist wip');
_showError('download ist wip');
},
),
IconButton(
icon: const Icon(Icons.download),
onPressed: () {
_showError('download ist wip');
},
onPressed: _downloadMedia,
),
PopupMenuButton<String>(
onSelected: (value) async {