A cross-platform document scanner built with Flutter. Capture documents with your camera, auto-detect and crop edges, run OCR to extract text, edit and enhance scans, then export and share them as PDFs.
scannerapp.mp4
- Document scanning — capture documents with automatic edge detection and cropping (
cunning_document_scanner). - Camera capture — live camera preview with a guided overlay and capture controls.
- OCR / text recognition — extract text from scanned images using Google ML Kit (
google_mlkit_text_recognition). - Image editing — crop, rotate, and enhance scans (
image_cropper,image_editor_plus). - PDF export — combine scans into a PDF, preview it, and save locally (
pdf,path_provider). - Share — send scans and PDFs to other apps (
share_plus). - Import from gallery — pick existing images to scan or recognize (
image_picker). - Responsive UI — adapts across screen sizes, with a custom splash screen.
- Flutter (Dart SDK
^3.10.3) - GetX (
get) — state management and routing - camera + cunning_document_scanner — capture and edge detection
- google_mlkit_text_recognition — on-device OCR
- pdf + path_provider + share_plus — PDF generation, storage, and sharing
- image_cropper, image_editor_plus, image_picker — image editing and import
- permission_handler — camera/storage permissions
- google_fonts, flutter_native_splash, cupertino_icons
lib/
├── main.dart # App entry point
├── controllers/ # GetX controllers
│ ├── scanner_controller.dart # camera + scan flow
│ ├── recognition_controller.dart # OCR text recognition
│ └── pdf_controller.dart # PDF build / export
├── screens/
│ ├── splash_screen.dart
│ ├── scanner_screen.dart # camera + scanning
│ ├── recognization_screen.dart # OCR results
│ └── pdf_preview_screen.dart # PDF preview / share
├── widgets/ # camera_overlay, top_bar, control_bar
└── utils/ # responsive utilities
- Flutter SDK (Dart
^3.10.3) - A physical device or emulator with camera access
-
Install dependencies:
flutter pub get
-
Run the app:
flutter run
Permissions: the app requests camera and storage access at runtime via
permission_handler. Make sure the corresponding entries exist inAndroidManifest.xml(Android) andInfo.plist(iOS).
flutter build apk # Android
flutter build ios # iOSAndroid · iOS
Note: scanning and OCR rely on camera and ML Kit, which are mobile-first. Desktop/web targets are scaffolded but not the primary platforms.