flutter_pdfview
一个 Flutter 插件,可在 Android 和 iOS 上提供 PDFView 小部件。
适用于 Flutter 的 PDF 查看器
以下为英文项目原文快照,最新内容请访问 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');
},
),
依赖清单 3 项
{"sdk":"flutter"}^6.0.0{"sdk":"flutter"}先按使用场景筛选,再比较项目活跃情况,最后到原始仓库核对使用要求。
“A repository is the most basic element of GitHub.”
GitHub Docs — About repositories ↗