搜索插件、代码仓与 APP 分类

insta_assets_picker 封面
插件详情v3.4.0

insta_assets_picker

一个类似于 Instagram 的图像(和视频)选择器,支持多选、裁剪和宽高比。

AndroidiOS
近 30 天下载
3650
喜欢数
165
Pub 分数
150

安装插件

flutter pub add insta_assets_picker

插件介绍

基于插件公开信息、社区数据与项目使用情况整理的选型参考。

一个 Flutter 包,提供类似 Instagram 的图片和视频选择器,支持多选、裁剪和自定义纵横比。它为从设备相册中选择媒体提供了简洁直观的界面,非常适合需要丰富媒体上传功能的应用程序。该选择器针对 Android 和 iOS 平台进行了优化,确保在各种设备上性能一致且用户体验良好。该组件设计注重简单性和可定制性,可无缝集成到现有的 Flutter 项目中。

适合场景

  • 社交媒体应用照片上传
  • 电子商务产品图片选择
  • 用户个人资料图片和视频上传
  • 内容创作工具与媒体批量处理
  • 多媒体表单提交

主要特点

  • Instagram 风格的用户界面
  • 多选图片和视频
  • 图像和视频裁剪
  • 可自定义的宽高比
  • Android 和 iOS 的原生性能

适合对象

  • 开发社交应用的开发者
  • 需要高级媒体选择的应用程序
  • 需要批量媒体处理的项目
  • 以用户体验为中心的移动应用
  • Flutter 开发者想要原生样式的选择器

使用建议

  • 需要平台特定权限以访问媒体
  • 由于原生依赖项,可能导致应用体积增大
  • 仅限图像和视频类型
  • 裁剪功能可能需要额外配置
  • 不适用于非媒体文件选择

原始 README

以下为关联源码仓库的 README 原文快照,最新内容请访问源码仓库。

Instagram Assets Picker

Pub Flutter lints Gitmoji

An image (also with videos) picker based on Instagram picker UI. It is using the powerful flutter_wechat_assets_picker package to handle the picker and a custom version of image_crop for crop.

🚀 Features

  • ✅ Instagram layout
    • Scroll behaviors, animation
    • Preview, select, unselect action logic
  • ✅ Image and Video (but not video processing) support
  • ✅ Theme and language customization
  • ✅ Multiple assets pick (with maximum limit)
  • ✅ Single asset pick mode
  • ✅ Restore state of picker after pop
  • ✅ Select aspect ratios to crop all assets with (default to 1:1 & 4:5)
  • ✅ Crop all image assets at once and receive a stream with a progress value
  • ✅ Prepend or append a custom item in the assets list
  • ✅ Add custom action buttons

📸 Screenshots

Layout and scroll Crop

📖 Installation

Add this package to the pubspec.yaml

insta_assets_picker: ^3.4.0
‼️ DO NOT SKIP THIS PART

Since this package is a custom delegate of flutter_wechat_assets_picker you MUST follow this package setup recommendation : installation guide.

👀 Usage

For more details check out the example.

Future<List<AssetEntity>?> callPicker() => InstaAssetPicker.pickAssets(
    context,
    pickerConfig: InstaAssetPickerConfig(
      title: 'Select assets',
    ),
    maxAssets: 10,
    onCompleted: (Stream<InstaAssetsExportDetails> stream) {
        // TODO : handle crop stream result
        // i.e : display it using a StreamBuilder
        // - in the same page (closeOnComplete=true)
        // - send it to another page (closeOnComplete=false)
        // or use `stream.listen` to handle the data manually in your state manager
        // - ...
    },
);

Fields in InstaAssetsExportDetails:

Name Type Description
data List<InstaAssetsExportData> Contains the selected assets, crop parameters and possible crop file.
selectedAssets List<AssetEntity> Selected assets without crop
aspectRatio double Selected aspect ratio (1 or 4/5)
progress double Progress indicator of the exportation (between 0 and 1)

Fields in InstaAssetsExportData:

Name Type Description
croppedFile File? The cropped file. Can be null if video or if choose to skip crop.
selectedData InstaAssetsCropData The selected asset and it's crop parameter (area, scale, ratio...)
Picker configuration

Please follow flutter_wechat_assets_picker documentation : AssetPickerConfig

Localizations

Please follow flutter_wechat_assets_picker documentation : Localizations

Theme customization

Most of the components of the picker can be customized using theme.

// set picker theme based on app theme primary color
final theme = InstaAssetPicker.themeData(Theme.of(context).primaryColor);
InstaAssetPicker.pickAssets(
    context,
    pickerConfig: InstaAssetPickerConfig(
      pickerTheme: theme.copyWith(
        canvasColor: Colors.black, // body background color
        splashColor: Color.grey, // ontap splash color
        colorScheme: theme.colorScheme.copyWith(
          background: Colors.black87, // albums list background color
        ),
        appBarTheme: theme.appBarTheme.copyWith(
          backgroundColor: Colors.black, // app bar background color
          titleTextStyle: Theme.of(context)
              .appBarTheme
              .titleTextStyle
              ?.copyWith(color: Colors.white), // change app bar title text style to be like app theme
        ),
        // edit `confirm` button style
        textButtonTheme: TextButtonThemeData(
          style: TextButton.styleFrom(
            foregroundColor: Colors.blue,
            disabledForegroundColor: Colors.red,
          ),
        ),
      ),
    ),
    onCompleted: (_) {},
);
Crop customization

You can set the list of crop aspect ratios available. You can also set the preferred size, for the cropped assets.

InstaAssetPicker.pickAssets(
    context,
    pickerConfig: InstaAssetPickerConfig(
      cropDelegate: InstaAssetCropDelegate(
        // allows you to set the preferred size used when cropping the asset.
        // the final size will depends on the scale used when cropping.
        preferredSize: 1080,
        cropRatios: [
        // - allow you to set the list of aspect ratios selectable,
        // the default values are [1/1, 4/5] like instagram.
        // - if you want to disable cropping, you can set only one parameter,
        // in this case, the "crop" button will not be displayed (#10).
        // - if the value of cropRatios is different than the default value,
        // the "crop" button will display the selected ratio value (i.e.: 1:1)
        // instead of unfold arrows.
      ]),
    ),
    onCompleted: (_) {},
);
Camera

Many people requested the ability to take picture from the picker. The main aspect of this package is selection and uniform crop selection. Consequently, camera-related operations have no place in this package. However, since version 2.0.0, it is now possible to trigger this action using either specialItemBuilder and/or actionsBuilder.

The ability to take a photo from the camera must be handled on your side, but the picker is now able to refresh the list and select the new photo. New examples have been written to show how to manage this process with the camera or wechat_camera_picker package.

Video

Video are now supported on version 3.0.0. You can pick a video asset and select the crop area directly in the picker. However, as video processing is a heavy operation it is not handled by this package. Which means you must handle it yourself. If you want to preview the video result, you can use the InstaAssetCropTransform which will transform the Image or VideoPlayer to fit the selected crop area.

The example app has been updated to support videos (+ camera recording) and shows how to process the video using the now retired ffmpeg_kit_flutter.

✨ Credit

This package is based on flutter_wechat_assets_picker by AlexV525 and image_crop by lykhonis.

所属分类

依赖

依赖清单 8 项

源码仓库

使用此插件的项目

暂无相关数据。