showPickerWithFormType static method

Future<ExtendedAssetEntity?> showPickerWithFormType(
  1. BuildContext context, {
  2. List<PickerFromTypeItem> fromTypes = defaultPickerFromTypeItem,
  3. AssetPickerConfig? assetPickerConfig,
  4. AssetPickerPageRouteBuilder<List<AssetEntity>>? pageRouteBuilderForAssetPicker,
  5. CameraPickerConfig? cameraPickerConfig,
  6. CameraPickerPageRoute<AssetEntity> pageRouteBuilderForCameraPicker(
    1. Widget picker
    )?,
  7. FlAssetFileRenovate? renovate,
  8. int maxBytes = 167772160,
})

选择图片或者视频

Implementation

static Future<ExtendedAssetEntity?> showPickerWithFormType(
  BuildContext context, {
  /// 选择框提示item
  List<PickerFromTypeItem> fromTypes = defaultPickerFromTypeItem,

  /// 资源选择器配置信息
  AssetPickerConfig? assetPickerConfig,
  AssetPickerPageRouteBuilder<List<AssetEntity>>?
      pageRouteBuilderForAssetPicker,

  /// 相机配置信息
  CameraPickerConfig? cameraPickerConfig,
  CameraPickerPageRoute<AssetEntity> Function(Widget picker)?
      pageRouteBuilderForCameraPicker,

  /// 资源重编辑
  FlAssetFileRenovate? renovate,

  /// 资源最大占用字节
  int maxBytes = 167772160,
}) async {
  if (!_supportable) return null;
  final pickerFromTypeConfig = await showPickerFromType(context, fromTypes);
  if (pickerFromTypeConfig == null) return null;
  AssetEntity? entity;
  switch (pickerFromTypeConfig.fromType) {
    case PickerFromType.gallery:
      if (context.mounted) {
        final assetsEntity = await showPickerAssets(context,
            pageRouteBuilder: pageRouteBuilderForAssetPicker,
            pickerConfig: AssetPickerConfig(
                maxAssets: 1,
                requestType: pickerFromTypeConfig.requestType,
                selectedAssets: []).merge(assetPickerConfig));
        if (assetsEntity == null || assetsEntity.isEmpty) return null;
        entity = assetsEntity.first;
      } else {
        return null;
      }
      break;
    case PickerFromType.camera:
      if (context.mounted) {
        entity = await showPickerFromCamera(context,
            pageRouteBuilder: pageRouteBuilderForCameraPicker,
            pickerConfig: const CameraPickerConfig(
                    resolutionPreset: ResolutionPreset.high)
                .merge(cameraPickerConfig)
                .copyWith(
                    enableRecording:
                        pickerFromTypeConfig.requestType.containsVideo(),
                    onlyEnableRecording:
                        pickerFromTypeConfig.requestType == RequestType.video,
                    enableAudio: pickerFromTypeConfig.requestType
                            .containsVideo() ||
                        pickerFromTypeConfig.requestType.containsAudio()));
      } else {
        return null;
      }
      break;
    default:
      return null;
  }
  if (entity == null) return null;
  final file = await entity.file;
  if (file == null) {
    errorCallback?.call(ErrorDes.maxBytes);
    return null;
  }
  final fileBytes = file.readAsBytesSync();
  if (fileBytes.length > maxBytes) {
    errorCallback?.call(ErrorDes.maxBytes);
    return null;
  }
  return await entity.toExtended(renovate: renovate);
}