Flutter电子书阅读插件epub_kitty的使用

epub_kitty

构建状态 版本号 平台

epub_kitty 是一个基于 FolioReaderKit 框架封装的 EPUB 电子书阅读器插件。它支持 iOS 和 Android 平台,并且在 iOS 上具有高度可定制性。使用起来非常简单,只需配置好参数即可打开电子书,非常方便。不过在 Android 上的可定制性还有待提高,但已经能满足日常需求。

中文文档


安装

pubspec.yaml 文件中添加依赖:

dependencies:
  epub_kitty: ^0.1.7

然后运行以下命令以安装依赖:

flutter pub get

简单使用

第一步:配置参数

/**
 * @identifier (Android 无用)
 * @themeColor 主题颜色(例如绿色)
 * @scrollDirection 阅读方向 ("vertical" 或 "horizontal")
 * @allowSharing 是否允许分享功能
 */
EpubKitty.setConfig("book", "#32a852", "vertical", true);

第二步:打开电子书

/**
 * @bookPath 电子书路径
 */
EpubReader.open('bookPath');

// 监听页面变化(仅适用于 iOS)
static const pageChannel = const EventChannel('com.xiaofwang.epub_kitty/page');

工具语言

iOS

iOS 插件默认语言为英语。如果你需要中文支持,可以配置 Localizable.strings 文件。具体示例可以参考 GitHub 示例

Android

在 0.1.7 版本之前,Android 默认语言为中文;之后版本默认为英语。如果你使用的版本较早,可以通过 res/strings.xml 文件来匹配中文。更多细节可以查看 Issue #7


问题

如果无法安装插件,可能是由于插件冲突或未完全安装。更多解决方案可以查看 Issues 页面

祝你好运!


QQ 交流

QQ:853797155,欢迎交流问题和技术!


欢迎 Pull Request

欢迎提交 Pull Request 提供帮助!


完整示例代码

以下是一个完整的示例代码,展示如何使用 epub_kitty 打开 EPUB 文件:

import 'dart:io';

import 'package:flutter/material.dart';
import 'dart:async';

import 'package:flutter/services.dart';
import 'package:epub_kitty/epub_kitty.dart';
import 'package:path_provider/path_provider.dart';

void main() => runApp(MyApp());

class MyApp extends StatefulWidget {
  [@override](/user/override)
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  static const pageChannel =
      const EventChannel('com.xiaofwang.epub_kitty/page');

  [@override](/user/override)
  void initState() {
    super.initState();

    // 可选:监听页面变化
    // pageChannel.receiveBroadcastStream().listen((event) {
    //   print('当前页码: $event');
    // }, onError: null);
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('EPUB Reader 示例'),
        ),
        body: Center(
          child: GestureDetector(
            onTap: () async {
              // 获取应用文档目录
              Directory appDocDir = await getApplicationDocumentsDirectory();
              print('文档目录: ${appDocDir.path}');

              // 设置电子书路径(iOS 和 Android 的路径格式不同)
              String iosBookPath = '${appDocDir.path}/4.epub';
              String androidBookPath = 'file:///android_asset/PhysicsSyllabus.epub';

              // 配置阅读器参数
              EpubKitty.setConfig("iosBook", "#32a852", "vertical", true);

              // 打开电子书
              EpubKitty.open(iosBookPath);
            },
            child: Container(
              child: Text('打开 EPUB 文件'),
            ),
          ),
        ),
      ),
    );
  }
}

更多关于Flutter电子书阅读插件epub_kitty的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter电子书阅读插件epub_kitty的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


epub_kitty 是一个用于在 Flutter 应用中显示和阅读 EPUB 电子书的插件。它基于 epub_view 插件,并提供了更多的功能和定制选项。以下是如何在 Flutter 项目中使用 epub_kitty 插件的详细步骤。

1. 添加依赖

首先,在 pubspec.yaml 文件中添加 epub_kitty 依赖:

dependencies:
  flutter:
    sdk: flutter
  epub_kitty: ^0.1.0  # 请检查最新版本

然后运行 flutter pub get 来获取依赖。

2. 导入包

在需要使用 epub_kitty 的 Dart 文件中导入包:

import 'package:epub_kitty/epub_kitty.dart';

3. 使用 EpubKitty 组件

EpubKitty 是一个用于显示 EPUB 电子书的组件。你可以通过以下方式使用它:

class EpubReaderScreen extends StatelessWidget {
  final String epubPath;

  EpubReaderScreen({required this.epubPath});

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('EPUB Reader'),
      ),
      body: EpubKitty(
        epubPath: epubPath,
        onEpubLoaded: () {
          print('EPUB loaded successfully');
        },
        onEpubError: (error) {
          print('Error loading EPUB: $error');
        },
      ),
    );
  }
}

4. 加载 EPUB 文件

你可以通过传递 EPUB 文件的路径来加载电子书。通常,EPUB 文件可以存储在应用的 assets 文件夹中,或者从网络下载后存储在设备的本地文件系统中。

assets 加载 EPUB 文件

首先,在 pubspec.yaml 文件中声明 EPUB 文件:

flutter:
  assets:
    - assets/sample.epub

然后,使用 DefaultAssetBundle 来加载 EPUB 文件:

class EpubReaderScreen extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('EPUB Reader'),
      ),
      body: FutureBuilder<String>(
        future: DefaultAssetBundle.of(context).loadString('assets/sample.epub'),
        builder: (context, snapshot) {
          if (snapshot.hasData) {
            return EpubKitty(
              epubPath: snapshot.data!,
              onEpubLoaded: () {
                print('EPUB loaded successfully');
              },
              onEpubError: (error) {
                print('Error loading EPUB: $error');
              },
            );
          } else if (snapshot.hasError) {
            return Center(child: Text('Error loading EPUB'));
          } else {
            return Center(child: CircularProgressIndicator());
          }
        },
      ),
    );
  }
}

从本地文件系统加载 EPUB 文件

如果你已经将 EPUB 文件下载到设备的本地文件系统中,可以直接传递文件路径:

class EpubReaderScreen extends StatelessWidget {
  final String epubPath;

  EpubReaderScreen({required this.epubPath});

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('EPUB Reader'),
      ),
      body: EpubKitty(
        epubPath: epubPath,
        onEpubLoaded: () {
          print('EPUB loaded successfully');
        },
        onEpubError: (error) {
          print('Error loading EPUB: $error');
        },
      ),
    );
  }
}

5. 自定义选项

epub_kitty 提供了一些自定义选项,例如设置字体大小、主题颜色等。你可以通过 EpubKitty 的构造函数来设置这些选项:

EpubKitty(
  epubPath: epubPath,
  onEpubLoaded: () {
    print('EPUB loaded successfully');
  },
  onEpubError: (error) {
    print('Error loading EPUB: $error');
  },
  themeColor: Colors.blue,
  fontSize: 18.0,
  allowSharing: true,
  enableTts: true,
);
回到顶部