media_retriever 0.2.1 copy "media_retriever: ^0.2.1" to clipboard
media_retriever: ^0.2.1 copied to clipboard

Flutter package for retrieving and handling media (images, video) from multiple sources.

Media Retriever #

style: very good analysis Powered by Mason License: MIT

Flutter package for retrieving and handling media (images, video) from multiple sources.
Supported platforms: iOS and Android.

Screenshots #

Bottom sheet de sélection Galerie multi-sélection Capture caméra

Installation #

Add to your app's pubspec.yaml:

dependencies:
  media_retriever: ^0.1.0

Permissions (application native) — obligatoires #

Pour que le package fonctionne (galerie + caméra + enregistrement vidéo avec son), votre app doit déclarer les droits natifs suivants. Le package ne les ajoute pas ; c’est à vous de les configurer. Sans eux, le sélecteur ne s’ouvrira pas ou renverra une liste vide.

iOS — à ajouter dans ios/Runner/Info.plist :

Clé Rôle
NSPhotoLibraryUsageDescription Accès à la photothèque pour sélectionner des médias.
NSCameraUsageDescription Accès à la caméra pour capturer photos et vidéos.
NSMicrophoneUsageDescription Accès au micro pour enregistrer l’audio lors d’une vidéo.

Exemple minimal :

<key>NSPhotoLibraryUsageDescription</key>
<string>Accès à la photothèque pour sélectionner des médias.</string>
<key>NSCameraUsageDescription</key>
<string>Accès à la caméra pour capturer des photos et vidéos.</string>
<key>NSMicrophoneUsageDescription</key>
<string>Accès au micro pour enregistrer l'audio lors d'une vidéo.</string>

Optionnel : si votre app sauvegarde aussi des photos/vidéos dans la photothèque, ajoutez :

<key>NSPhotoLibraryAddUsageDescription</key>
<string>Accès pour sauvegarder des photos et vidéos dans la bibliothèque photo.</string>

Android — à ajouter dans android/app/src/main/AndroidManifest.xml (dans <manifest>, avant <application>) :

Permission Rôle
CAMERA Capturer photos et vidéos.
RECORD_AUDIO Enregistrer le son dans les vidéos.
READ_EXTERNAL_STORAGE Lire la galerie (Android < 13).
READ_MEDIA_IMAGES Lire les images (Android 13+).
READ_MEDIA_VIDEO Lire les vidéos (Android 13+).

Exemple :

<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_MEDIA_IMAGES" />
<uses-permission android:name="android.permission.READ_MEDIA_VIDEO" />

Optionnel : sur anciennes versions d’Android, si votre app écrit des fichiers sur le stockage externe, vous pouvez ajouter WRITE_EXTERNAL_STORAGE (certaines apps l’utilisent pour la compatibilité).

Si l’utilisateur refuse les permissions, le picker ne s’ouvre pas et les méthodes du package renvoient une liste vide. Chaque appel peut déclencher une nouvelle demande de permission.

Exemple d’intégration (app Zibmarket)

L’app Zibmarket utilise ce package. Voici ce qui a été mis en place côté natif pour que la galerie et la caméra fonctionnent.

iOS (apps/zibmarket_app/ios/Runner/Info.plist) — libellés utilisateur :

<key>NSCameraUsageDescription</key>
<string>Zibmarket utilise la caméra pour permettre aux professionnels de photographier et filmer leurs produits, ainsi que pour que les utilisateurs puissent prendre leur photo de profil ou envoyer des photos dans le chat.</string>
<key>NSMicrophoneUsageDescription</key>
<string>Zibmarket utilise le microphone pour enregistrer le son lors de la création de vidéos de produits par les professionnels.</string>
<key>NSPhotoLibraryUsageDescription</key>
<string>Zibmarket nécessite l'accès à votre bibliothèque photo pour sélectionner des images de produits, votre photo de profil ou des photos à envoyer dans le chat.</string>
<key>NSPhotoLibraryAddUsageDescription</key>
<string>Zibmarket nécessite l'accès pour sauvegarder des photos et vidéos de produits dans votre bibliothèque photo.</string>

Android (apps/zibmarket_app/android/app/src/main/AndroidManifest.xml) — permissions liées au média (extrait) :

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.READ_MEDIA_IMAGES" />
<uses-permission android:name="android.permission.READ_MEDIA_VIDEO" />

Vous pouvez vous inspirer de ces libellés et les adapter à votre contexte.

Usage #

Récupérer des médias (photos et vidéos) #

import 'dart:io';

import 'package:flutter/material.dart';
import 'package:media_retriever/media_retriever.dart';

final retriever = MediaRetriever();

// Sans limite de sélection
final List<File> files = await retriever.recupereMedias(context);

// Limiter à 3 fichiers maximum
final List<File> limited = await retriever.recupereMedias(context, limit: 3);

if (files.isEmpty) {
  // User cancelled or permissions denied
} else {
  // Use files (from gallery selection or single camera capture)
}

Récupérer uniquement des photos #

final photos = await retriever.recuperePhotos(context, limit: 5);

La galerie n’affiche que les images ; le bouton caméra est en mode photo uniquement.

Récupérer uniquement des vidéos #

final videos = await retriever.recupereVideos(context, limit: 1);

La galerie n’affiche que les vidéos ; le bouton caméra est en mode vidéo uniquement.

Paramètre limit #

  • limit: null (défaut) — sélection illimitée.

  • limit: n avec n > 0 — au plus n fichiers sélectionnables. Une exception est levée si limit <= 0.

  • Galerie : l’utilisateur sélectionne un ou plusieurs médias puis appuie sur « Valider ». Le nombre de sélections est plafonné par limit.

  • Caméra : bouton en bas à gauche ; selon la méthode, la caméra est en mode photo uniquement, vidéo uniquement, ou les deux. Retourne une liste d’un fichier.


Continuous Integration 🤖 #

Media Retriever comes with a built-in GitHub Actions workflow powered by Very Good Workflows but you can also add your preferred CI/CD solution.

Out of the box, on each pull request and push, the CI formats, lints, and tests the code. This ensures the code remains consistent and behaves correctly as you add functionality or make changes. The project uses Very Good Analysis for a strict set of analysis options used by our team. Code coverage is enforced using the Very Good Workflows.


Running Tests 🧪 #

For first time users, install the very_good_cli:

dart pub global activate very_good_cli

To run all unit tests:

very_good test --coverage

To view the generated coverage report you can use lcov.

# Generate Coverage Report
genhtml coverage/lcov.info -o coverage/

# Open Coverage Report
open coverage/index.html
0
likes
130
points
17
downloads

Documentation

API reference

Publisher

unverified uploader

Weekly Downloads

Flutter package for retrieving and handling media (images, video) from multiple sources.

Repository (GitHub)
View/report issues

License

MIT (license)

Dependencies

camera, desktop_drop, file_picker, flutter, gal, image_picker, path, permission_handler, photo_manager

More

Packages that depend on media_retriever