arsync_image_picker 0.0.4 copy "arsync_image_picker: ^0.0.4" to clipboard
arsync_image_picker: ^0.0.4 copied to clipboard

A flexible, extensible image picker for Flutter with plug-and-play addons

arsync_image_picker #

A flexible, extensible image picker for Flutter with plug-and-play addons.

Features #

  • 🎯 Simple API with powerful customization
  • πŸ”§ Extensible processors and validators
  • πŸ“± Multiple UI styles (Material Design, Cupertino)
  • πŸ”Œ Plug-and-play addon system
  • πŸ“¦ Lightweight core with optional heavy features
  • βœ… Built-in file size validation
  • πŸ”„ Format conversion (JPG/PNG)
  • πŸ“ File renaming support

Installation #

Add this to your pubspec.yaml:

dependencies:
  arsync_image_picker: ^latest_version

Quick Start #

import 'package:arsync_image_picker/arsync_image_picker.dart';

// Create a picker instance
final picker = ArsyncImagePicker();

// Add optional validators
picker.addValidator(FileSizeValidator(maxSizeMB: 5.0));

// Pick a single image
final image = await picker.pickImage(context: context);

// Pick multiple images
final images = await picker.pickImages(context: context);

Basic Usage #

Single Image #

final picker = ArsyncImagePicker();

final image = await picker.pickImage(
  context: context,
  onImageSelected: () {
    // Show loading indicator
    print('Processing image...');
  },
);

if (image != null) {
  // Use your image
  print('Image path: ${image.path}');
}

Multiple Images #

final images = await picker.pickImages(
  context: context,
  onImagesSelected: () {
    print('Processing images...');
  },
);

if (images != null) {
  print('Selected ${images.length} images');
}

Direct Gallery/Camera Access #

// Pick from gallery only
final image = await picker.pickImageFromGallery(context: context);

// Take photo with camera only
final image = await picker.pickImageFromCamera(context: context);

Built-in Features #

File Size Validation #

picker.addValidator(FileSizeValidator(maxSizeMB: 5.0));

File Renaming #

picker.addProcessor(FileNameProcessor(newFileName: 'profile_pic'));

Format Conversion #

picker.addProcessor(FormatConverterProcessor(
  targetFormat: ImageFormatType.jpg,
));

Custom UI #

Material Design (Default) #

final picker = ArsyncImagePicker(
  uiProvider: DefaultImagePickerUI(),
);

Cupertino Style #

final picker = ArsyncImagePicker(
  uiProvider: CupertinoImagePickerUI(),
);

Custom UI Config #

final picker = ArsyncImagePicker(
  uiConfig: ImagePickerUIConfig(
    title: 'Select Photo',
    galleryButtonText: 'Choose from Library',
    cameraButtonText: 'Take New Photo',
  ),
);

Available Addons #

Extend functionality with these optional addon packages:

Image Compression #

Add smart image compression to reduce file sizes:

dependencies:
  arsync_image_picker: ^latest_version
  arsync_image_compression: ^latest_version
import 'package:arsync_image_compression/arsync_image_compression.dart';

picker.addProcessor(ImageCompressionProcessor(
  targetMaxSizeMB: 2.0,
  quality: 80,
));

Image Cropping #

Add interactive image cropping functionality:

dependencies:
  arsync_image_picker: ^latest_version
  arsync_image_cropper: ^latest_version
import 'package:arsync_image_cropper/arsync_image_cropper.dart';

picker.addProcessor(ImageCroppingProcessor(
  options: CropOptions(
    aspectRatio: CropAspectRatio(ratioX: 1, ratioY: 1), // Square crop
    title: 'Crop Your Image',
  ),
));

Permissions #

Android #

No permissions are required.

iOS #

Add these to ios/Runner/Info.plist:

<key>NSCameraUsageDescription</key>
<string>This app needs camera access to take photos</string>
<key>NSPhotoLibraryUsageDescription</key>
<string>This app needs photo library access to select images</string>

Creating Custom Processors #

class CustomProcessor implements ImageProcessor {
  @override
  Future<bool> shouldProcess(XFile image, bool isMultiple, int index) async {
    // Return true if this image should be processed
    return true;
  }

  @override
  Future<XFile> process(XFile image, bool isMultiple, int index) async {
    // Process the image and return the result
    return image;
  }
}

// Use it
picker.addProcessor(CustomProcessor());

Creating Custom Validators #

class CustomValidator implements ImageValidator {
  @override
  Future<bool> validate(XFile image) async {
    // Return true if image is valid
    return true;
  }

  @override
  String get errorMessage => 'Custom validation failed';
}

// Use it
picker.addValidator(CustomValidator());

Author #

Atif Siddiqui

About Arsync Solutions #

Arsync Solutions, We build Flutter apps for iOS, Android, and the web.

License #

This project is licensed under the MIT License - see the LICENSE file for details.

Contributing #

Contributions are welcome! If you find a bug or want a feature, please open an issue.

0
likes
160
points
102
downloads

Publisher

unverified uploader

Weekly Downloads

A flexible, extensible image picker for Flutter with plug-and-play addons

Homepage
Repository (GitHub)
View/report issues

Topics

#image-picker #camera #gallery #image-processing

Documentation

API reference

License

MIT (license)

Dependencies

flutter, image, image_picker, path

More

Packages that depend on arsync_image_picker