flutter_pdfview 1.5.0-beta.2 copy "flutter_pdfview: ^1.5.0-beta.2" to clipboard
flutter_pdfview: ^1.5.0-beta.2 copied to clipboard

A Flutter plugin that provides a PDFView widget on Android and iOS.

flutter_pdfview #

Native PDF View for iOS and Android

Buy Me A Coffee

Use this package as a library #

1. Depend on it #

Add this to your package's pubspec.yaml file:

dependencies:
  flutter_pdfview: ^1.4.5

Trying the 1.5.0 beta

1.5.0-beta.2 ports the native implementations to Kotlin (Android) and Swift (iOS) with no public Dart API changes (same as 1.5.0-beta.1, plus docs for iOS platform-view filter limits). Pre-releases are not picked up by a ^ constraint, so pin it explicitly:

dependencies:
  flutter_pdfview: 1.5.0-beta.2

Feedback is welcome in #351.

2. Install it #

You can install packages from the command line:

with Flutter:

$ flutter packages get

Alternatively, your editor might support pub get or flutter packages get. Check the docs for your editor to learn more.

3. Import it #

Now in your Dart code, you can use:

import 'package:flutter_pdfview/flutter_pdfview.dart';

Options #

Name Android iOS Default
defaultPage 0
onViewCreated null
onRender null
onPageChanged null
onLoadComplete null
onDraw null
onError null
onPageError null
onLinkHandle null
gestureRecognizers null
filePath
pdfData
fitPolicy FitPolicy.WIDTH
enableSwipe true
swipeHorizontal false
password null
nightMode false
autoSpacing* true
pageFling true
pageSnap true
preventLinkNavigation false
backgroundColor null
minZoom 1.0
maxZoom 4.0
showScrollIndicators* false

Notes:

  • showScrollIndicators is ignored on iOS while horizontal page-flipping is active (pageFling: true together with swipeHorizontal: true).
  • autoSpacing only adds gaps between pages. It does not change initial zoom or fitPolicy (fixed in #150).

Using PDFView inside a scrollable widget #

When a PDFView is embedded in a scrollable parent (SingleChildScrollView, ListView, PageView, ...), the parent can claim drag gestures before they reach the native view, so swiping inside the PDF does not work — most notably on iOS (#265). Pass an EagerGestureRecognizer to let the PDF view consume gestures within its bounds:

import 'package:flutter/foundation.dart';
import 'package:flutter/gestures.dart';

PDFView(
  filePath: path,
  gestureRecognizers: {
    Factory<OneSequenceGestureRecognizer>(() => EagerGestureRecognizer()),
  },
)

BackdropFilter / ColorFiltered over PDFView (iOS) #

PDFView is a platform view (UiKitView on iOS, hybrid composition on Android). Flutter composites native views outside the normal Flutter layer tree, so some widgets that sample or recolor the scene do not apply to the PDF pixels — especially on iOS.

Widget iOS platform view Notes
ColorFiltered / ShaderMask ❌ not supported Official Flutter limitation
BackdropFilter ⚠️ partial Supported with restrictions; needs a recent Flutter

This is not a bug in flutter_pdfview. Flutter documents it under iOS platform view composition limitations: ShaderMask and ColorFiltered are unsupported; BackdropFilter works only within the constraints of the iOS Platform View Backdrop Filter design.

Workarounds

  1. Color inversion / dark pages — Prefer the plugin API instead of wrapping the view in ColorFiltered:

    • Android: nightMode: true (native invert).
    • iOS: nightMode is not available today; use a theme-appropriate backgroundColor, or invert offline content before load if you control the PDF bytes.
  2. Blur / glass under a sheet — Place the BackdropFilter so it samples Flutter-drawn content (not only the hole where the native PDF sits), use a semi-transparent barrierColor / scrim, or capture a static preview with PDFViewController.getScreenshot and blur that Image with Flutter widgets.

  3. Static filtered preview — For a one-shot recolor (e.g. thumbnail), take a screenshot and wrap the resulting image:

final path = await controller.getScreenshot('preview.png');
// Then:
ColorFiltered(
  colorFilter: const ColorFilter.mode(Colors.grey, BlendMode.saturation),
  child: Image.file(File(path)),
);

Wrapping PDFView itself in ColorFiltered will keep painting a solid tint under the native view on iOS while leaving the PDF contents unchanged (#213).

Controller Options #

Name Description Parameters Return
getPageCount Get total page count - Future<int>
getCurrentPage Get current page - Future<int>
setPage Go to/Set page int page Future<bool>
getCurrentPageSize Return the width and height of the loaded page - Future<Size>
getScreenshot Create a PNG of the contents of the PDFView and save to fileName String fileName Future<String>
getPosition Get the position of the top left of the PDF with respect to the origin (top left of PDFView) - Future<Offset>
getScale Get the PDF zoom value, for zooming - Future<double>
setPosition Set the position of the top left of the PDF with respect to the origin (top left of PDFView) Offset position Future<bool>
setScale Set the PDF zoom value, for zooming double scale Future<bool>
setZoomLimits Set the minimum, maximum and mid bounds of the zoom limits double minZoom, double midZoom, double maxZoom -
reload Reload the PDF document in the PDFView - Future<bool>

Example #

PDFView(
  filePath: path,
  enableSwipe: true,
  swipeHorizontal: true,
  autoSpacing: false,
  pageFling: false,
  showScrollIndicators: true,
  backgroundColor: Colors.grey,
  onRender: (_pages) {
    setState(() {
      pages = _pages;
      isReady = true;
    });
  },
  onError: (error) {
    print(error.toString());
  },
  onPageError: (page, error) {
    print('$page: ${error.toString()}');
  },
  onViewCreated: (PDFViewController pdfViewController) {
    _controller.complete(pdfViewController);
  },
  onPageChanged: (int page, int total) {
    print('page change: $page/$total');
  },
  onLoadComplete: (int? pages) {
    print('# of pages: $pages');
  },
  onDraw: (double xOffset, double yOffset, double scale) {
    print('onDraw');
  },
),

Dependencies #

Android #

AndroidPdfViewer

iOS (only support> 12.0) #

PDFKit

Future plans #

  • Replace barteksc/AndroidPdfViewer with MuPDF or Android Native PDF Renderer.
  • Improve documentation
  • Support other platforms such as MacOS, Windows, Linux and Web
  • Add search functionality
  • Improve performance on zooming, page changing
  • Improve image quality
  • Write more test

Support #

Buy Me A Coffee

Donate with PayPal button

Star History #

Star History Chart

Developer #

745
likes
0
points
370k
downloads

Publisher

unverified uploader

Weekly Downloads

A Flutter plugin that provides a PDFView widget on Android and iOS.

Repository (GitHub)
View/report issues

Topics

#pdf #viewer #native

License

unknown (license)

Dependencies

flutter

More

Packages that depend on flutter_pdfview

Packages that implement flutter_pdfview