showPickerWithFormType static method
Future<ExtendedAssetEntity?>
showPickerWithFormType(
- BuildContext context, {
- bool mounted = true,
- 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< ? pageRouteBuilderForAssetPicker,AssetEntity> > - CameraPickerConfig? cameraPickerConfig,
- CameraPickerPageRoute<
AssetEntity> pageRouteBuilderForCameraPicker(- Widget picker
- FlAssetsPickerErrorCallback? errorCallback,
- FlAssetFileRenovate? renovate,
- 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);
}