epub_view
用于在所有平台上查看EPUB文档的纯Flutter小部件(非原生)。基于epub包。在任何平台上使用Flutter小部件(非原生视图)渲染:Web、MacOs、Windows、Linux、Android和iOS。
展示
入门
在您的 Flutter 项目中添加依赖项
flutter pub add epub_view
使用示例
import 'dart:typed_data';
import 'package:flutter/material.dart';
import 'package:flutter_epub/flutter_epub.dart';
late EpubController _epubController;
@override
void initState() {
super.initState();
_epubController = EpubController(
// Load document
document: EpubDocument.openAsset('assets/book.epub'),
// Set start point
epubCfi: 'epubcfi(/6/6[chapter-2]!/4/2/1612)',
);
}
@override
Widget build(BuildContext context) => Scaffold(
appBar: AppBar(
// Show actual chapter name
title: EpubViewActualChapter(
controller: _epubController,
builder: (chapterValue) => Text(
'Chapter: ' + (chapterValue?.chapter?.Title?.replaceAll('\n', '').trim() ?? ''),
textAlign: TextAlign.start,
)
),
),
// Show table of contents
drawer: Drawer(
child: EpubViewTableOfContents(
controller: _epubController,
),
),
// Show epub document
body: EpubView(
controller: _epubController,
),
);
如何从上次查看位置开始?
此方法允许您在章节内精确保留阅读位置。
_epubController = EpubController(
// initialize with epub cfi string for open book from last position
epubCfi: 'epubcfi(/6/6[chapter-2]!/4/2/1612)',
);
// Attach controller
EpubView(
controller: _epubController,
);
// Get epub cfi string
// for example output - epubcfi(/6/6[chapter-2]!/4/2/1612)
final cfi = _epubController.generateEpubCfi();
// or usage controller for navigate
_epubController.gotoEpubCfi('epubcfi(/6/6[chapter-2]!/4/2/1612)');
API
打开文档
本地文档打开
EpubDocument.openAsset('assets/sample.pdf')
EpubDocument.openData(FutureOr<Uint8List> data)
// Not supports on Web
EpubDocument.openFile('path/to/file/on/device')
网络文档打开
安装 [network_file] 包(支持所有平台)
flutter pub add internet_file
并使用它
import 'package:internet_file/internet_file.dart';
// The cors policy is required on the server.
// You can raise your cors proxy.
EpubDocument.openData(InternetFile.get('https://link.to/book.epub'))
控制文档
// Get epub cfi string of actual view insets
// for example output - epubcfi(/6/6[chapter-2]!/4/2/1612)
final cfi = _epubController.generateEpubCfi();
// Navigate to paragraph in document
_epubController.gotoEpubCfi('epubcfi(/6/6[chapter-2]!/4/2/1612)');
文档回调
EpubView(
controller: epubController,
onExternalLinkPressed: (href) {},
onDocumentLoaded: (document) {},
onChapterChanged: (chapter) {},
onDocumentError: (error) {},
);
