showPickerWithFormType static method

Future<ExtendedAssetEntity?> showPickerWithFormType(
  1. BuildContext context, {
  2. bool mounted = true,
  3. List<PickerFromTypeConfig> fromTypes = const [PickerFromTypeConfig(fromType: PickerFromType.assets, text: Text('图库选择'), requestType: RequestType.image), PickerFromTypeConfig(fromType: PickerFromType.camera, text: Text('相机拍摄'), requestType: RequestType.image), PickerFromTypeConfig(fromType: PickerFromType.cancel, text: Text('取消', style: TextStyle(color: Colors.red)))],
  4. PickerFromTypeBuilder? fromTypesBuilder,
  5. PickerFromType? pickerFromType,
  6. FlAssetsPickerCheckPermission? checkPermission,
  7. AssetPickerConfig? assetPickerConfig,
  8. AssetPickerPageRouteBuilder<List<AssetEntity>>? pageRouteBuilderForAssetPicker,
  9. CameraPickerConfig? cameraPickerConfig,
  10. CameraPickerPageRoute<AssetEntity> pageRouteBuilderForCameraPicker(
    1. Widget picker
    )?,
  11. FlAssetsPickerErrorCallback? errorCallback,
  12. FlAssetFileRenovate? renovate,
  13. int maxBytes = 167772160,
})

选择图片或者视频

Implementation

static Future<ExtendedAssetEntity?> showPickerWithFormType(
  BuildContext context, {
  bool mounted = true,

  /// 选择框提示item
  List<PickerFromTypeConfig> fromTypes = const [
    PickerFromTypeConfig(
        fromType: PickerFromType.assets,
        text: Text('图库选择'),
        requestType: RequestType.image),
    PickerFromTypeConfig(
        fromType: PickerFromType.camera,
        text: Text('相机拍摄'),
        requestType: RequestType.image),
    PickerFromTypeConfig(
        fromType: PickerFromType.cancel,
        text: Text('取消', style: TextStyle(color: Colors.red))),
  ],
  PickerFromTypeBuilder? fromTypesBuilder,

  /// 指定类型时
  PickerFromType? pickerFromType,

  /// 获取权限
  FlAssetsPickerCheckPermission? checkPermission,

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

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

  /// 错误提示
  FlAssetsPickerErrorCallback? errorCallback,

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

  /// 资源最大占用字节
  int maxBytes = 167772160,
}) async {
  if (!_isMobile) return null;
  PickerFromTypeConfig? pickerFromTypeConfig = await showPickerFromType(
      context, fromTypes,
      fromTypesBuilder: fromTypesBuilder);
  pickerFromType ??= pickerFromTypeConfig?.fromType;
  AssetEntity? entity;
  switch (pickerFromType) {
    case PickerFromType.assets:
      if (!mounted) return null;
      final assetsEntity = await showPickerAssets(context,
          pageRouteBuilder: pageRouteBuilderForAssetPicker,
          checkPermission: checkPermission,
          pickerConfig: AssetPickerConfig(
              maxAssets: 1,
              requestType: pickerFromTypeConfig!.requestType,
              selectedAssets: []).merge(assetPickerConfig));
      if (assetsEntity == null || assetsEntity.isEmpty) return null;
      entity = assetsEntity.first;
      break;
    case PickerFromType.camera:
      if (!mounted) return null;
      entity = await showPickerFromCamera(context,
          checkPermission: checkPermission,
          pageRouteBuilder: pageRouteBuilderForCameraPicker,
          pickerConfig: const CameraPickerConfig(
                  resolutionPreset: ResolutionPreset.high)
              .merge(cameraPickerConfig)
              .copyWith(
                  enableRecording:
                      pickerFromTypeConfig?.requestType.containsVideo(),
                  onlyEnableRecording:
                      pickerFromTypeConfig?.requestType == RequestType.video,
                  enableAudio: (pickerFromTypeConfig?.requestType
                              .containsVideo() ??
                          false) ||
                      (pickerFromTypeConfig?.requestType.containsAudio() ??
                          false)));
      break;
    default:
      return null;
  }
  if (entity == null) return null;
  final file = await entity.file;
  if (file == null) {
    errorCallback?.call('无法获取该资源');
    return null;
  }
  final fileBytes = file.readAsBytesSync();
  if (fileBytes.length > maxBytes) {
    errorCallback?.call('最大选择${_toSize(maxBytes)}');
    return null;
  }
  return entity.toExtensionAssetEntity(renovate: renovate);
}