// ignore_for_file: use_build_context_synchronously import 'dart:io'; import 'package:fipy/globals.dart'; import 'package:fipy/models/track.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:path_provider/path_provider.dart'; import 'package:youtube_explode_dart/youtube_explode_dart.dart'; class DownloadProvider with ChangeNotifier { Future downloadMusic(BuildContext context, Track track) async { var yt = YoutubeExplode(); var manifest = await yt.videos.streamsClient.getManifest(track.id); var streamManifest = StreamManifest(manifest.streams); var streamInfo = streamManifest.audioOnly.withHighestBitrate(); var stream = yt.videos.streamsClient.get(streamInfo); final fileName = '${track.title} - ${track.artiste}' .replaceAll('\\', '') .replaceAll('/', '') .replaceAll(':', '') .replaceAll('*', '') .replaceAll('?', '') .replaceAll('"', '') .replaceAll('<', '') .replaceAll('>', '') .replaceAll('|', ''); if (!kIsWeb) { final filePath = Platform.isAndroid ? Directory('/storage/emulated/0/Download') : await getDownloadsDirectory(); var file = File('${filePath!.path}/$fileName.webm'); var fileStream = file.openWrite(); await stream.pipe(fileStream); await fileStream.flush(); await fileStream.close(); yt.close(); // convertToMp3(file.path); track.file = file; ScaffoldMessenger.of(playerContext).showSnackBar( SnackBar( content: SizedBox(height: 90, child: Text('Son téléchargé: ${file.path}')), ), ); log.d(file.path); } } void reload() { notifyListeners(); } }