pdf_reading_tracker 4.0.0
pdf_reading_tracker: ^4.0.0 copied to clipboard
Production-ready Flutter PDF reader built on Syncfusion PDF Viewer, with reading progress tracking, bookmarks, highlights, notes, SQLite persistence, and PDF merge/split.
pdf_reading_tracker #
A production-ready Flutter PDF reader package powered by Syncfusion PDF Viewer.
Track reading progress, continue reading from where users left off, manage bookmarks, create annotations, attach text-linked notes, import PDFs from device storage, merge and split PDFs, and persist everything locally using SQLite.
Designed for educational, productivity, and document-centric applications.
Features #
| Category | Capabilities |
|---|---|
| PDF Reading | High-quality rendering, progress tracking, continue reading, recent PDFs, jump-to-page, multi-PDF support, double-tap zoom, vertical/horizontal navigation |
| Search | Built-in text search, search navigation, match highlighting |
| Bookmarks | Add/remove bookmarks, bookmark notes, SQLite-backed persistence |
| Annotations | Highlight, underline, strikethrough, squiggly, full persistence and restoration |
| Notes | Text-linked notes, edit/delete, jump-to-note, persistent storage |
| PDF Management | Import from device, persistent library, continue-reading & recent dashboards, auto-restore after restart |
| PDF Operations | Merge, split, typed exception handling |
| Storage | SQLite persistence, offline-first, temporary cache cleanup |
PDF Reading #
- High-quality PDF rendering using Syncfusion PDF Viewer
- Reading progress tracking
- Continue reading
- Recent PDFs
- Jump to page
- Multi-PDF support
- Double-tap zoom
- Vertical and horizontal navigation
- Persistent reading position
Search #
- Built-in PDF text search
- Search navigation
- Match highlighting
Bookmarks #
- Add bookmarks
- Remove bookmarks
- Bookmark notes
- Bookmark persistence
- SQLite-backed storage
Annotations #
- Highlight
- Underline
- Strikethrough
- Squiggly
- Annotation persistence
- Annotation restoration after restart
Notes #
- Text-linked notes
- Edit notes
- Delete notes
- Jump to note
- Persistent storage
User PDF Management #
- Import PDFs from device storage
- Persistent PDF library
- Continue reading dashboard
- Recent PDFs dashboard
- Automatic restoration after app restart
PDF Operations #
- Merge multiple PDFs
- Split PDFs into smaller documents
- Typed exception handling
- Syncfusion PDF processing
Storage #
- SQLite persistence
- Offline first
- Lightweight database
- Persistent PDF storage
- Temporary cache cleanup
- Storage-efficient architecture
Platform Support #
| Android | iOS |
|---|---|
| ✅ | ✅ |
Installation #
dependencies:
pdf_reading_tracker: ^4.0.0
Import #
import 'package:pdf_reading_tracker/pdf_reading_tracker.dart';
Quick Start #
PdfReadingTrackerViewer(
pdfId: 'clean_architecture',
pdfTitle: 'Clean Architecture',
assetPath: 'assets/pdfs/clean_architecture.pdf',
)
Complete Widget Example #
PdfReadingTrackerViewer(
pdfId: 'flutter_notes',
pdfTitle: 'Flutter Notes',
assetPath: 'assets/pdfs/flutter_notes.pdf',
showAppBar: true,
showBottomBar: true,
showBookmarkFab: true,
enableSearch: true,
enableHighlight: true,
swipeHorizontal: false,
enableDoubleTap: true,
)
Configuration #
| Parameter | Type | Default | Description |
|---|---|---|---|
pdfId |
String |
required | Stable unique identifier for this PDF |
pdfTitle |
String |
required | Display title shown in the app bar |
assetPath |
String |
required | Path to the bundled or imported PDF |
showAppBar |
bool |
true |
Show/hide the reader's app bar |
showBottomBar |
bool |
true |
Show/hide the bottom navigation bar |
showBookmarkFab |
bool |
true |
Show/hide the floating bookmark button |
enableSearch |
bool |
true |
Enable in-document text search |
enableHighlight |
bool |
true |
Enable highlight annotations |
swipeHorizontal |
bool |
false |
Horizontal vs. vertical page navigation |
enableDoubleTap |
bool |
true |
Enable double-tap-to-zoom |
Reading Progress API #
// Save progress
await PdfReadingTracker.saveProgress(
ReadingProgress.create(
pdfId: 'flutter_notes',
currentPage: 25,
totalPages: 100,
title: 'Flutter Notes',
),
);
// Get progress
final progress = await PdfReadingTracker.getProgress('flutter_notes');
// Get recently read
final recent = await PdfReadingTracker.getRecentlyRead();
Bookmarks API #
await PdfReadingTracker.addBookmark(
Bookmark.create(
pdfId: 'flutter_notes',
page: 25,
note: 'Important topic',
),
);
final bookmarks = await PdfReadingTracker.getBookmarks('flutter_notes');
Highlights API #
final highlights = await PdfReadingTracker.getHighlights('flutter_notes');
Notes API #
final notes = await PdfReadingTracker.getNotes('flutter_notes');
Search API #
Search is available directly on PdfReadingTrackerViewer via enableSearch: true, exposing in-document text search with navigation between matches and highlighted results.
PDF Import #
final picked = await PdfPickerService.pickPdf();
PDF Merge #
final mergedPdf = await PdfMergeService.merge(
inputPaths: [pdf1, pdf2, pdf3],
);
PDF Split #
final files = await PdfSplitService.split(
pdfPath: sourcePdf,
pagesPerFile: 25,
);
Architecture #
- Syncfusion PDF Viewer for rendering
- Syncfusion PDF processing for merge/split
- SQLite persistence layer
- Offline-first design
- Service-based architecture separating reading, bookmarks, annotations, and notes
Storage #
- SQLite-backed, lightweight schema
- Efficient annotation and note storage
- Automatic cleanup of temporary imported PDFs
Performance #
- Background isolate-based page geometry reads to avoid UI jank
- Debounced progress persistence to minimize database writes
Offline Support #
Fully offline-first — all reading progress, bookmarks, highlights, and notes are persisted locally via SQLite with no network dependency.
Example App #
The example/ app demonstrates the full feature set: PDF reading, progress tracking, continue reading, recent PDFs, bookmarks, notes, highlights, PDF import, merge, and split.
Roadmap #
- Dominant/exact page detection improvements
- Expanded search customization
- Additional annotation types
Contributing #
Issues and pull requests are welcome via the issue tracker.
Known Limitations #
- Reading progress relies on Syncfusion page-change events combined with visible-area detection; exact dominant-page accuracy is being refined.
- Native swipe-threshold page snapping is not yet implemented (tracked for a future release pending a Syncfusion viewer upgrade).
License #
MIT License