flutter_document_scanner

Creator: coderz1093

Last updated:

Add to Cart

Description:

flutter document scanner

Flutter Document Scanner #




Generated by the Very Good CLI 🤖

🚧 Under Development! 🚧
A Flutter plugin that allows the management of taking, cropping and applying filters to an image, using
the Camera plugin.
For Android use OpenCV.
For iOS use Vision Kit.

Basic #

With Customizations #


TODO #



Feature
Android
iOS




Adjust perspective




Apply filters




Find contours from external image




Improve error control




Add Unit Test




Find contours in real time




Taking multiple photos at once





Usage #
First, add flutter_document_scanner as
a dependency in your pubspec.yaml file.
Later add camera permissions in the AndroidManifest.xml and Info.plist files.
Example #
Import libraries. #
import 'package:flutter_document_scanner/flutter_document_scanner.dart';
copied to clipboard
Initialize the DocumentScannerController #
final _controller = DocumentScannerController();
copied to clipboard
Display widget #
DocumentScanner(
controller: _controller,
onSave: (Uint8List imageBytes) {
print("image bytes: $imageBytes");
},
);
copied to clipboard

Controller Document uses #
Actions #
_controller.takePhoto(minContourArea: 80000.0,);

_controller.cropPhoto();

_controller.applyFilter(FilterType.gray);

_controller.savePhotoDocument();

_controller.changePage(AppPages.cropPhoto);
copied to clipboard
Can listen to the changes #
_controller.statusTakePhotoPage.listen((AppStatus event) {
print("Changes when taking the picture");
print("[initial, loading, success, failure]");
});


_controller.statusCropPhoto.listen((AppStatus event) {
print("Changes while cutting the image and adding warp perspective");
print("[initial, loading, success, failure]");
});


_controller.statusEditPhoto.listen((AppStatus event) {
print("Changes when editing the image (applying filters)");
print("[initial, loading, success, failure]");
});


_controller.currentFilterType.listen((FilterType event) {
print("Listen to the current filter applied on the image");
print("[ natural, gray, eco]");
});


_controller.statusSavePhotoDocument.listen((AppStatus event) {
print("Changes while the document image is being saved");
print("[initial, loading, success, failure]");
});

_controller.currentPage.listen((AppPages page) {
print("Changes in the current page");
print("[takePhoto, cropPhoto, editDocument]");
});

copied to clipboard
Can get photos #
final File? photoTaken = _controller.pictureTaken;

final Uint8List? photoCropped = _controller.pictureCropped;
copied to clipboard
Can find contours from gallery o external image #
To learn more, you can see the example from_gallery_page.dart
final picker = ImagePicker();
final image = await picker.pickImage(source: ImageSource.gallery);

if (image == null) return;

await _controller.findContoursFromExternalImage(
image: File(image.path),
);
copied to clipboard

Customizations #
Change messages dialogs #
Only if "hideDefaultDialogs" of GeneralStyles is set to false.
If you want to add another type of dialogs you must do it manually with the status changes and set "hideDefaultDialogs" of GeneralStyles to true.
DocumentScanner(
controller: _controller,
onSave: (Uint8List imageBytes) {
print("image bytes: $imageBytes");
},
generalStyles: const GeneralStyles(
messageTakingPicture: 'Capturando documento',
messageCroppingPicture: 'Recortando documento',
messageEditingPicture: 'Editando documento',
messageSavingPicture: 'Guardando documento',
),
);
copied to clipboard
Camera #
DocumentScanner(
controller: _controller,
onSave: (Uint8List imageBytes) {
print("image bytes: $imageBytes");
},
resolutionCamera: ResolutionPreset.high,
initialCameraLensDirection: CameraLensDirection.front,
);
copied to clipboard
Page transitions #
DocumentScanner(
controller: _controller,
onSave: (Uint8List imageBytes) {
print("image bytes: $imageBytes");
},
pageTransitionBuilder: (child, animation) {
final tween = Tween(begin: 0.0, end: 1.0);

final curvedAnimation = CurvedAnimation(
parent: animation,
curve: Curves.easeOutCubic,
);

return FadeTransition(
opacity: tween.animate(curvedAnimation),
child: child,
);
},
);

copied to clipboard
General Styles #
The properties are
listed here

Page Styles #
If you want to add widgets or modify elements of each page you can do it with their respective style per page.
Page to take the photo #
The properties are
listed here
Page to crop the image #
The properties are
listed here
Page to edit image #
The properties are
listed here

Contributors ✨ #
Thanks goes to these wonderful people (emoji key):









criistian14💻 📖
Maurits van Beusekom💻






Add your contributions








This project follows the all-contributors specification. Contributions of any kind welcome!

License

For personal and professional use. You cannot resell or redistribute these repositories in their original state.

Customer Reviews

There are no reviews.