mobileAttachmentPickerBuilder function

Widget mobileAttachmentPickerBuilder({
  1. required BuildContext context,
  2. required StreamAttachmentPickerController controller,
  3. Iterable<AttachmentPickerOption>? customOptions,
  4. ThumbnailSize attachmentThumbnailSize = const ThumbnailSize(400, 400),
  5. ThumbnailFormat attachmentThumbnailFormat = ThumbnailFormat.jpeg,
  6. int attachmentThumbnailQuality = 100,
  7. double attachmentThumbnailScale = 1,
})

Returns the mobile version of the attachment picker.

Implementation

Widget mobileAttachmentPickerBuilder({
  required BuildContext context,
  required StreamAttachmentPickerController controller,
  Iterable<AttachmentPickerOption>? customOptions,
  ThumbnailSize attachmentThumbnailSize = const ThumbnailSize(400, 400),
  ThumbnailFormat attachmentThumbnailFormat = ThumbnailFormat.jpeg,
  int attachmentThumbnailQuality = 100,
  double attachmentThumbnailScale = 1,
}) {
  return StreamMobileAttachmentPickerBottomSheet(
    controller: controller,
    onSendAttachments: Navigator.of(context).pop,
    options: {
      if (customOptions != null) ...customOptions,
      AttachmentPickerOption(
        key: 'gallery-picker',
        icon: StreamSvgIcon.pictures(size: 36).toIconThemeSvgIcon(),
        supportedTypes: [
          AttachmentPickerType.images,
          AttachmentPickerType.videos,
        ],
        optionViewBuilder: (context, controller) {
          final selectedIds = controller.value.map((it) => it.id);
          return StreamGalleryPicker(
            selectedMediaItems: selectedIds,
            mediaThumbnailSize: attachmentThumbnailSize,
            mediaThumbnailFormat: attachmentThumbnailFormat,
            mediaThumbnailQuality: attachmentThumbnailQuality,
            mediaThumbnailScale: attachmentThumbnailScale,
            onMediaItemSelected: (media) async {
              if (selectedIds.contains(media.id)) {
                return controller.removeAssetAttachment(media);
              }
              return controller.addAssetAttachment(media);
            },
          );
        },
      ),
      AttachmentPickerOption(
        key: 'file-picker',
        icon: StreamSvgIcon.files(size: 36).toIconThemeSvgIcon(),
        supportedTypes: [AttachmentPickerType.files],
        optionViewBuilder: (context, controller) {
          return StreamFilePicker(
            onFilePicked: (file) async {
              if (file != null) await controller.addAttachment(file);
              return Navigator.pop(context, controller.value);
            },
          );
        },
      ),
      AttachmentPickerOption(
        key: 'image-picker',
        icon: StreamSvgIcon.camera(size: 36).toIconThemeSvgIcon(),
        supportedTypes: [AttachmentPickerType.images],
        optionViewBuilder: (context, controller) {
          return StreamImagePicker(
            onImagePicked: (image) async {
              if (image != null) {
                await controller.addAttachment(image);
              }
              return Navigator.pop(context, controller.value);
            },
          );
        },
      ),
      AttachmentPickerOption(
        key: 'video-picker',
        icon: StreamSvgIcon.record(size: 36).toIconThemeSvgIcon(),
        supportedTypes: [AttachmentPickerType.videos],
        optionViewBuilder: (context, controller) {
          return StreamVideoPicker(
            onVideoPicked: (video) async {
              if (video != null) {
                await controller.addAttachment(video);
              }
              return Navigator.pop(context, controller.value);
            },
          );
        },
      ),
    },
  );
}