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
  • 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