Flutter Media Picker Get
A Flutter package that provides a customizable and easy-to-use media picker, allowing users to select multiple images or videos with support for camera integration.
Features
- Multi-media selection (Images and Videos)
- Single or multiple selection support
- Camera integration
- Customizable media count limit
Installation
Add the following dependency in your pubspec.yaml
file:
dependencies:
flutter_media_picker_get: ^0.0.6
Android Permissions
<uses-feature
android:name="android.hardware.camera"
android:required="false" />
<uses-permission
android:name="android.permission.WRITE_EXTERNAL_STORAGE"
android:maxSdkVersion="29"
tools:replace="android:maxSdkVersion" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission
android:name="android.permission.WRITE_EXTERNAL_STORAGE"
android:maxSdkVersion="29" />
<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_MEDIA_AUDIO" />
<uses-permission android:name="android.permission.CAMERA" />
iOS Permissions
- Open Info.plist in your Flutter project, located at ios/Runner/Info.plist.
- Add the following keys for camera and photo library access. These keys provide descriptions that explain to users why your app requires these permissions:
<key>NSCameraUsageDescription</key>
<string>We need access to your camera to allow you to capture photos and videos.</string>
<key>NSPhotoLibraryUsageDescription</key>
<string>We need access to your photo library to allow you to select photos and videos.</string>
<key>NSPhotoLibraryAddUsageDescription</key>
<string>We need permission to save photos and videos to your photo library.</string>
Usage
To use the media picker, follow these steps:
- Import the package
import 'package:flutter_media_picker_get/flutter_media_picker_get.dart';
- Use the MediaPicker widget to open the media picker
ElevatedButton(
onPressed: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => MediaPicker(
mediaCount: 10,
selection: SelectionEnum.MultiMedia,
multiSelection: true,
cameraEnable: true,
onPressedConfirm: myCallback,
),
),
);
},
child: Text("Picker"),
);
Parameters
- mediaCount: Maximum number of items that can be selected.
- selection: Selection type. Use SelectionEnum.MultiMedia for images and videos.
- multiSelection: Boolean to allow multiple media selection.
- cameraEnable: Boolean to enable camera access within the picker.
- onPressedConfirm: Callback function triggered when the user confirms selection.
Example
import 'package:flutter/material.dart';
import 'package:flutter_media_picker_get/flutter_media_picker_get.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: HomeScreen(),
);
}
}
class HomeScreen extends StatelessWidget {
Future<void> myCallback({required dynamic value}) async {
if (value is List<MediaItem>) {
for (var media in value) {
if (media.type == MediaType.image) {
final file = await media.assetEntity.file;
if (file != null) {
if (kDebugMode) {
print("file $file");
}
}
}
}
} else {
if (value is MediaItem) {
final file = await value.assetEntity.file;
if (kDebugMode) {
print("file $file");
}
}
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text("Media Picker Example")),
body: Center(
child: ElevatedButton(
onPressed: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => MediaPicker(
mediaCount: 10,
selection: SelectionEnum.MultiMedia,
multiSelection: true,
cameraEnable: true,
onPressedConfirm: myCallback,
),
),
);
},
child: Text("Open Media Picker"),
),
),
);
}
}