Afin de rendre l’expérience utilisateur fluide et sans interruption, il est intéressant de pouvoir télécharger des fichiers localement.
Cette approche présente plusieurs avantages :
Disponibilité Hors Ligne :
L’un des principaux avantages du téléchargement local de fichiers est la possibilité d’accéder à ces fichiers même en l’absence de connexion Internet.
Faible Latence lors de la Lecture :
Le téléchargement local de fichiers permet une lecture plus rapide et fluide, car les fichiers sont stockés directement sur l’appareil de l’utilisateur. Cette approche réduit considérablement le temps de chargement par rapport au streaming en direct, où les fichiers doivent être récupérés à chaque demande. Une faible latence améliore l’expérience de l’utilisateur.
Économie de Bande Passante :
En téléchargeant les fichiers localement, vous pouvez réduire la charge sur les serveurs, économisant ainsi de la bande passante tant pour les utilisateurs que pour votre infrastructure.
Future<List<String>?> downloadAudioAssets(List<AudioItem> audios) async { Directory appDir = await getApplicationCacheDirectory(); final assetFolder = Directory('${appDir.path}/audios'); bool exist = await assetFolder.exists(); if (exist == false) { await assetFolder.create(recursive: true); } return Future.wait(audios.map((AudioItem audioItem) async { String path = '${assetFolder.path}/${audioItem.file}'; bool fileExist = await File(path).exists(); if (fileExist == false) { return getAudioFile(audioItem.getStreamPath(), path); } else { return Future.sync(() => "File $path exist"); } })); } Future<String> getAudioFile(url, path) async { try { var uri = Uri.parse(url); final response = await http.get(uri, headers: {"Content-Type": "application/json"}); if (response.contentLength == 0) { return ""; } File file = File(path); await file.create(); await file.writeAsBytes(response.bodyBytes); return "File ${file.path} downloaded"; } catch (e) { //handle download error } }
La variable audios contient une liste d’objets ayant pour propriété l’url du fichier (audioItem.file).
Dans la première fonction on récupère le chemin du dossier dans lequel télécharger les fichier. Si ce dossier n’existe pas on le créez.
Pour chaque élément on vérifie si le fichier est déjà téléchargé.
Si le fichier n’existe pas on le télécharge à l’aide de la seconde fonction.