Project Title

A brief description of what this project does and who it's for

๐Ÿ“ฆ picker_pro_max_ultra

pub package

A powerful and customizable media picker for Flutter, built with performance and ease of use in mind.

Easily pick images , file and videos from device storage or capture new ones with camera support. Comes with advanced features like folder browsing, multi-selection, capture image from camera, and custom UI also allow to pick file.


Feature Android iOS Web Windows macOS Linux
Image Picker โœ… โœ… โœ… โŒ โŒ โŒ
Video Picker โœ… โœ… โœ… โŒ โŒ โŒ
Document Picker โœ… โœ… โœ… โŒ โŒ โŒ
Audio Picker โœ… โŒ โœ… โŒ โŒ โŒ
Camera (Capture) โœ… โœ… โŒ โŒ โŒ โŒ

โœจ Features

  • ๐Ÿ“ธ Capture image & video using the camera
  • ๐Ÿ–ผ Pick images & videos from the gallery
  • ๐Ÿ“‚ Folder-based media browsing
  • ๐Ÿ” Multi-selection support
  • ๐Ÿ“ File pick support
  • ๐ŸŽต Audio picker (Android only)
  • โšก Fast loading with optimized performance

๐Ÿ›  Installation

Add this to your pubspec.yaml:

dependencies:
  picker_pro_max_ultra: ^<latest_version>

Replace <latest_version> with the latest version on pub.dev.


โš™๏ธ Setup

๐Ÿ“ Note

Permission handling (e.g. for accessing media, storage, or camera) must be implemented from the Flutter side using packages like permission_handler or through manual platform configuration.

This plugin does not request or manage permissions internally.

โœ… Android

Add the following permissions to your AndroidManifest.xml (android/app/src/main/AndroidManifest.xml):

    <!-- Media Access -->
<uses-permission android:name="android.permission.READ_MEDIA_IMAGES" /><uses-permission
android:name="android.permission.READ_MEDIA_VIDEO" /><uses-permission
android:name="android.permission.READ_EXTERNAL_STORAGE"
android:maxSdkVersion="32" /><uses-permission
android:name="android.permission.WRITE_EXTERNAL_STORAGE" /><uses-permission
android:name="android.permission.READ_MEDIA_AUDIO" /><!-- Camera Access -->
<uses-permission android:name="android.permission.CAMERA" />

๐Ÿ iOS

Add the following entries to your ios/Runner/Info.plist:


<key>NSPhotoLibraryUsageDescription</key><string>This app requires access to your photo library.
</string>

<key>NSCameraUsageDescription</key><string>This app requires access to the camera.</string>

<key>NSMicrophoneUsageDescription</key><string>This app requires access to the microphone.</string>

๐Ÿงช Example Usage


// Manage theme

  MaterialApp(
    title: 'Media Picker',
    theme: ThemeData(
    primarySwatch: Colors.green,
    extensions: <ThemeExtension<dynamic>>[
        const PickerThemeData(
            bottomSheetBackgroundColor: Colors.black,
            bottomSheetIndicatorColor: Colors.blue,
            tabDisableColor: Colors.grey,
            tabEnableColor: Colors.red,
            doneTextStyle: TextStyle(color: Colors.orange),
            cancelTextStyle: TextStyle(
                 color: Colors.white,fontWeight:FontWeight.bold),
            borderRadius: 10,
         ),
       ],
     ),
   home: const MyHomePage(),
)

// Pick media
// show loader
         MediaPicker(
            context: context,
            maxLimit: 5 ?? 1,
           mediaType: MediaType.image
           ).showPicker()
              .then((file) {
              // hide loader
                  if (file != null) {
                    filePath = file.first.mediaFile!.path;
                      setState(() {});
                     }
                  }).catchError((onError) {
                 // hide loader
                });


// Capture from camera
          MediaPicker(context: context,).
                   capturedFile().
                   then((file){
                    /// hide loader
                    if (file != null) {
                        filePath = file.path;
                        setState(() {});
                     }
                    }).catchError((onError) {
                    /// hide loader
                });




// Pick Document
                MediaPicker(
                   context: context,
                ).picFile().then((file) {
                 /// hide loader
                   if (file != null) {
                    filePath = file.path;
                    setState(() {});
                   }
                }).catchError((onError) {
                /// hide loader
                });


For a full example, check out the example folder. | |


๐ŸŽฅ Demo (Screen Recording)

Screen Recording


๐Ÿงฉ Contributions

Contributions, issues, and feature requests are welcome!
Feel free to check issues page.


๐Ÿ“„ License

This project is licensed under the MIT License.