Flutter package to load EPUB in Web, Android, iOS and MacOS


Flutter widget for view EPUB documents on all platforms. Based on epub package. Render with flutter widgets (not native view) on Web, MacOs, Android and iOS

for Web a bug is noticed, see flutter_html issue#300


Getting Started

In your flutter project add the dependency:

pub package

  epub_view: any

Usage example:

import 'dart:typed_data';

import 'package:flutter/material.dart';
import 'package:flutter_epub/flutter_epub.dart';
import 'package:flutter/services.dart' show rootBundle;

Future<Uint8List> _loadFromAssets(String assetName) async {
  final bytes = await rootBundle.load(assetName);
  return bytes.buffer.asUint8List();

EpubController _epubController;

void initState() {
  _epubController = EpubController(
    // Future<Uint8List>
    data: _loadFromAssets('assets/book.epub'),
    // or pure Uint8List
    // document: EpubReader.readBook(data),

Widget build(BuildContext context) => Scaffold(
  appBar: AppBar(
    // Show actual chapter name
    title: EpubActualChapter(
      controller: _epubController,
      builder: (chapterValue) => Text(
        'Chapter ${chapterValue.chapter.Title ?? ''}',
        textAlign: TextAlign.start,
  // Show table of contents
  drawer: Drawer(
    child: EpubReaderTableOfContents(
      controller: _epubController,
  // Show epub document
  body: EpubView(
    controller: _epubController,

How start from last view position?

This method allows you to keep the exact reading position even inside the chapter:

_epubController = EpubController(
  // initialize with epub cfi string for open book from last position
  epubCfi: 'epubcfi(/6/6[chapter-2]!/4/2/1612)',

// Attach controller
  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
Check it on GitHub