import 'dart:io'; import 'package:file_picker/file_picker.dart'; import 'package:flutter/material.dart'; import 'package:image_picker/image_picker.dart'; import 'package:mc_common_app/utils/app_permission_handler.dart'; abstract class CommonAppServices { Future> pickMultipleImages(); Future pickImageFromPhone(int sourceFlag); Future?> pickMultipleFiles(BuildContext context); Future pickFile(BuildContext context, {required FileType fileType, List? allowedExtensions}); } class CommonServicesImp implements CommonAppServices { @override Future pickImageFromPhone(int sourceFlag) async { final picker = ImagePicker(); final pickedImage = await picker.pickImage( source: sourceFlag == 0 ? ImageSource.camera : ImageSource.gallery, ); final pickedImageFile = File(pickedImage!.path); return pickedImageFile; } @override Future?> pickMultipleFiles(BuildContext context) async { FilePickerResult? result; final status = await AppPermissions.checkStoragePermissions(context); if (status) { result = await FilePicker.platform.pickFiles(allowMultiple: true, type: FileType.custom, allowedExtensions: ['pdf']); } List pickedFiles = []; if (result != null) { for (var element in result.files) { if (element.path != null) { pickedFiles.add(File(element.path!)); } } } return pickedFiles; } @override Future> pickMultipleImages() async { final picker = ImagePicker(); final pickedImagesXFiles = await picker.pickMultiImage(); List pickedImages = []; if (pickedImagesXFiles == null) { return []; } if (pickedImagesXFiles.isEmpty) { return []; } for (var element in pickedImagesXFiles) { pickedImages.add(File(element.path)); } return pickedImages; } @override Future pickFile(BuildContext context, {required FileType fileType, List? allowedExtensions}) async { FilePickerResult? result; final status = await AppPermissions.checkStoragePermissions(context); if (status) { result = await FilePicker.platform.pickFiles( allowMultiple: true, type: fileType, allowedExtensions: allowedExtensions); } List pickedFiles = []; if (result != null) { for (var element in result.files) { if (element.path != null) { pickedFiles.add(File(element.path!)); } } } return pickedFiles.length > 0 ? pickedFiles.first : null; } }