flutter_pdfview
一個 Flutter 外掛程式,可在 Android 和 iOS 上提供 PDFView 小部件。
適用於 Flutter 的 PDF 瀏覽器
{"sdk":"flutter"}^6.0.0{"sdk":"flutter"}以下為英文專案原文快照,最新內容請造訪 GitHub。
Native PDF View for iOS and Android
Add this to your package's pubspec.yaml file:
dependencies:
flutter_pdfview: ^1.4.5
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.
Now in your Dart code, you can use:
import 'package:flutter_pdfview/flutter_pdfview.dart';
| 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).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()),
},
)
| 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> |
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');
},
),