// SPDX-FileCopyrightText: 2022 Iconica // // SPDX-License-Identifier: BSD-3-Clause import 'dart:typed_data'; import 'package:flutter_image_picker/src/models/image_picker_config.dart'; import 'package:image_picker/image_picker.dart'; /// The Image Picker Service class is the functionality of the Image Picker package which uses the Image Picker package to choose an image. /// If you have your own implementation of the Image Picker you can add it to the constructor when creating the class. abstract class ImagePickerService { /// [pickImage] is the function that picks the image and returns it as a [Uint8List]. /// The function requires [source], an [ImageSource] Future pickImage( ImageSource source, { ImagePickerConfig? config, }); } /// The ImagePickerServiceDefault is the default implementation of the ImagePickerService. /// It uses the Image Picker package to pick an image and returns it as a [Uint8List]. class ImagePickerServiceDefault implements ImagePickerService { ImagePickerServiceDefault({this.imagePicker}); /// It's possible to have your own implementation for the Image Picker if you don't want to use the Image Picker Package. ImagePicker? imagePicker; /// [pickImage] is the function that picks the image and returns it as a [Uint8List]. /// The function requires [source], an [ImageSource] that's the method of how the image needs to be picked, for example gallery or camera. @override Future pickImage( ImageSource source, { ImagePickerConfig? config, }) async => await (await (imagePicker ?? ImagePicker()).pickImage( source: source, maxWidth: config?.maxWidth, maxHeight: config?.maxHeight, imageQuality: config?.imageQuality, )) ?.readAsBytes(); }