패키지, 저장소 및 앱 카테고리 검색

GitHub 저장소Mamasodikov/cosmos_epub

cosmos_epub

뛰어난 UI, 쉬운 사용자 정의 및 훌륭한 기능을 갖춘 EPUB 리더 패키지

cosmos_epub 프로젝트 이미지
스타
29
포크
17
최근 푸시(UTC)
2026. 4. 25.
프로젝트 상태
활성

원본 README

아래는 영문 원문 스냅샷입니다. 최신 내용은 GitHub에서 확인하세요.

CosmosEpub 💫

A feature-rich EPUB reader package for Flutter with page flip animations, text highlighting, hyphenation, infinite nested chapters, image support, RTL languages, customizable themes and fonts.

Showcase

banner

Features

  • Text Highlighting — select text, pick a color (6 options), highlights persist across sessions. Re-highlight to change color. Copy & Select All support.
  • Hyphenation — syllable-aware word breaking for better justified text. Visible "-" at line breaks. Respects Uzbek digraphs (ch, sh, g', o').
  • Infinite Nested Chapters — recursive TOC with unlimited depth. Section title pages auto-generated.
  • Image Support — EPUB images rendered inline (PNG, JPEG, GIF, SVG, WebP).
  • Page Flip Animation — realistic 3D page curl effect with swipe gestures.
  • 5 Themes — Grey, Purple, White, Black, Pink.
  • 14 Fonts — Alegreya, Amazon Ember, Bookerly, EB Garamond, Lora, Ubuntu, and more.
  • RTL Support — Arabic, Persian, Hebrew, Urdu, and other RTL languages with auto-detection.
  • Reading Progress — chapter and page position saved per book.
  • Brightness Control — in-reader brightness slider.
  • Multiple Sources — open EPUB from assets, local file, URL, or raw bytes.
  • Robust Parsing — 3-tier chapter resolution (NCX NavMap → epubx Chapters → Spine order). Handles malformed EPUBs.

Getting Started

Add the dependency:

dependencies:
  cosmos_epub: ^1.0.0
flutter pub get

Usage

Initialize

Call initialize() once before using any other method (preferably in main.dart):

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await CosmosEpub.initialize();
  runApp(MyApp());
}
Open a Book
// From assets
await CosmosEpub.openAssetBook(
  assetPath: 'assets/book.epub',
  context: context,
  bookId: 'my_book_1',
  accentColor: Colors.indigoAccent,
  onPageFlip: (currentPage, totalPages) {
    print('Page $currentPage of $totalPages');
  },
  onLastPage: (lastPageIndex) {
    print('Reached last page');
  },
);

// From local file
await CosmosEpub.openLocalBook(
  localPath: '/path/to/book.epub',
  context: context,
  bookId: 'my_book_2',
);

// From URL
await CosmosEpub.openURLBook(
  urlPath: 'https://example.com/book.epub',
  context: context,
  bookId: 'my_book_3',
);

// From bytes
await CosmosEpub.openFileBook(
  bytes: myUint8List,
  context: context,
  bookId: 'my_book_4',
);
Progress Management
// Get current progress
BookProgressModel progress = CosmosEpub.getBookProgress('my_book_1');
print('Chapter: ${progress.currentChapterIndex}');
print('Page: ${progress.currentPageIndex}');

// Set progress manually
await CosmosEpub.setCurrentChapterIndex('my_book_1', 5);
await CosmosEpub.setCurrentPageIndex('my_book_1', 3);

// Delete progress
await CosmosEpub.deleteBookProgress('my_book_1');
await CosmosEpub.deleteAllBooksProgress();
Highlight Management
// Get all highlights for a book
List<HighlightModel> highlights = CosmosEpub.getBookHighlights('my_book_1');

// Remove a specific highlight
CosmosEpub.removeHighlight(highlights.first.id);

// Remove all highlights for a book
CosmosEpub.removeAllHighlights('my_book_1');
Clear Theme Cache
await CosmosEpub.clearThemeCache();

Parameters

Parameter Type Default Description
assetPath / localPath / urlPath / bytes String / Uint8List required EPUB source
context BuildContext required Build context for navigation
bookId String required Unique ID for progress tracking
accentColor Color Colors.indigoAccent Primary accent color
onPageFlip Function(int, int)? null Called on page change
onLastPage Function(int)? null Called on last page
chapterListTitle String 'Table of Contents' TOC screen title
shouldOpenDrawer bool false Open TOC on start
starterChapter int -1 Start at specific chapter

RTL Language Support 🌍

Automatic detection and support for Right-to-Left languages:

  • Arabic (العربية), Persian (فارسی), Hebrew (עברית), Urdu (اردو)
  • Pashto (پښتو), Sindhi (سنڌي), Kurdish (کوردی), Dhivehi (ދިވެހި), Yiddish (ייִדיש)

No configuration needed — just open the EPUB and the library handles direction, alignment, and navigation automatically.

Notes

  • Each book must have a unique bookId. Using the same ID for different books will cause progress conflicts.
  • Highlights are stored locally via GetStorage and persist across app restarts.
  • The package uses isar_community for progress persistence (Android/iOS/Desktop only, no web support).

License

BSD-3

Contact

Feel free to open an issue or reach out: https://allmylinks.com/mamasodikov

Muhammad Aziz GitHub avatar
GitHub 작성자

Muhammad Aziz ↗

I'm a qualified Mobile Developer 📱 🐦

Regional GovernmentUzbekistan
언어DartCC++CMakeObjective-CJavaRubyPythonShellSwiftKotlin

분류

이 저장소가 배포한 패키지

사용 중인 의존성

의존성 목록 17 개

프로젝트에 맞는 저장소를 선택하려면?

사용 목적에 따라 검색하고 개발 활동을 비교한 뒤 원본 저장소에서 요구 사항을 확인하세요.

  1. 이름, 작성자 또는 설명으로 검색하고 기술 주제로 범위를 좁힙니다.
  2. 스타, 포크, 최근 푸시를 함께 비교하세요. 스타는 관심의 지표이며 품질을 보장하지 않습니다.
  3. 사용하기 전에 GitHub에서 README, 라이선스, Issues를 확인하세요.

출처 및 관리

“A repository is the most basic element of GitHub.”

GitHub Docs — About repositories ↗