Top Related Projects
A Java ePub reader and parser framework for Android.
Enhanced eBooks in the browser.
A cross platform desktop reading app, based on the Readium Desktop toolkit
The official source code repository for the calibre ebook manager
An ebook reader application supporting PDF, DjVu, EPUB, FB2 and many more formats, running on Cervantes, Kindle, Kobo, PocketBook and Android devices
Quick Overview
FlutterEbookApp is an open-source Flutter project that demonstrates how to build a feature-rich eBook reader application. It showcases various Flutter widgets and best practices for creating a responsive and visually appealing user interface for browsing, reading, and managing eBooks.
Pros
- Comprehensive example of a real-world Flutter application
- Implements various UI components and animations for an engaging user experience
- Integrates with external APIs for fetching book data
- Demonstrates state management using the Provider package
Cons
- Limited documentation for some of the more complex features
- Lacks unit and integration tests
- Some dependencies may be outdated and require updates
- Not optimized for tablet or large screen devices
Code Examples
- Fetching books from an API:
Future<List<Category>> getCategories() async {
var response = await http.get(
Uri.parse("${Constants.baseURL}/api/categories"),
);
return (json.decode(response.body) as List)
.map((data) => Category.fromJson(data))
.toList();
}
- Implementing a custom book card widget:
class BookCard extends StatelessWidget {
final Entry entry;
BookCard({Key? key, required this.entry}) : super(key: key);
@override
Widget build(BuildContext context) {
return Container(
width: 120.0,
child: Card(
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(10.0),
),
elevation: 4.0,
child: ClipRRect(
borderRadius: BorderRadius.circular(10.0),
child: Image.network(
entry.cover ?? '',
fit: BoxFit.cover,
),
),
),
);
}
}
- Using Provider for state management:
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MultiProvider(
providers: [
ChangeNotifierProvider(create: (_) => AppProvider()),
ChangeNotifierProvider(create: (_) => DetailsProvider()),
ChangeNotifierProvider(create: (_) => FavoritesProvider()),
],
child: MaterialApp(
title: 'Flutter eBook App',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: Splash(),
),
);
}
}
Getting Started
To run the FlutterEbookApp project:
-
Clone the repository:
git clone https://github.com/JideGuru/FlutterEbookApp.git
-
Navigate to the project directory:
cd FlutterEbookApp
-
Install dependencies:
flutter pub get
-
Run the app:
flutter run
Make sure you have Flutter and Dart SDK installed on your system before running the project.
Competitor Comparisons
A Java ePub reader and parser framework for Android.
Pros of FolioReader-Android
- Native Android development, potentially offering better performance and deeper system integration
- More mature project with a larger community and longer development history
- Supports a wider range of EPUB features and customization options
Cons of FolioReader-Android
- Limited to Android platform, lacking cross-platform compatibility
- Steeper learning curve for developers not familiar with Android development
- May require more boilerplate code compared to Flutter's declarative UI approach
Code Comparison
FolioReader-Android (Java):
FolioReader folioReader = FolioReader.get()
.setOnHighlightListener(this)
.setReadPositionListener(this)
.setConfig(config)
.openBook(R.raw.epub_sample);
FlutterEbookApp (Dart):
EpubViewer.setConfig(
themeColor: Theme.of(context).primaryColor,
identifier: "iosBook",
scrollDirection: EpubScrollDirection.ALLDIRECTIONS,
allowSharing: true,
enableTts: true,
);
EpubViewer.open('assets/book.epub');
FolioReader-Android offers more granular control over the reader configuration, while FlutterEbookApp provides a simpler, more concise API for basic functionality. The Flutter version benefits from cross-platform compatibility and a more modern, reactive programming model, but may lack some of the advanced features and customization options available in the native Android implementation.
Enhanced eBooks in the browser.
Pros of epub.js
- Written in JavaScript, making it more versatile for web-based applications
- Extensive documentation and API reference available
- Larger community and more frequent updates
Cons of epub.js
- Limited to web environments, unlike FlutterEbookApp's cross-platform capabilities
- Requires additional setup for mobile app integration
- Less out-of-the-box UI components compared to FlutterEbookApp
Code Comparison
FlutterEbookApp (Dart):
class Home extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text('Flutter eBook App')),
body: BookList(),
);
}
}
epub.js (JavaScript):
var book = ePub("book.epub");
var rendition = book.renderTo("viewer", {
width: 600,
height: 400
});
var displayed = rendition.display();
The FlutterEbookApp code snippet shows a basic app structure using Flutter widgets, while the epub.js code demonstrates how to render an EPUB file in a web environment. FlutterEbookApp provides a more complete app structure, whereas epub.js focuses on EPUB rendering functionality.
A cross platform desktop reading app, based on the Readium Desktop toolkit
Pros of Thorium Reader
- Cross-platform support (Windows, macOS, Linux) vs Flutter's mobile focus
- Advanced EPUB3 and PDF support with accessibility features
- Open-source and actively maintained by a non-profit organization
Cons of Thorium Reader
- Larger application size due to Electron framework
- Potentially slower performance compared to native Flutter app
- Steeper learning curve for contributors (TypeScript vs Dart)
Code Comparison
Thorium Reader (TypeScript):
export function convertContentToHtml(
content: string,
link: string,
rootFile: string,
): string {
const resourceResolver = (contentRef: string) =>
resolveHref(contentRef, link, rootFile);
return convertCustomSchemeToHttpUrl(content, resourceResolver);
}
FlutterEbookApp (Dart):
Future<List<Entry>> getFeeds() async {
var response = await http.get(Uri.parse(api));
if (response.statusCode == 200) {
var jsonResponse = convert.jsonDecode(response.body);
return Entry.parseEntries(jsonResponse);
} else {
throw ('Request failed with status: ${response.statusCode}');
}
}
The code snippets showcase different approaches to handling content and data retrieval in each project, reflecting their respective languages and frameworks.
The official source code repository for the calibre ebook manager
Pros of Calibre
- Comprehensive e-book management system with library organization, metadata editing, and format conversion
- Cross-platform support (Windows, macOS, Linux) with a native desktop application
- Large and active community with frequent updates and extensive plugin ecosystem
Cons of Calibre
- Steeper learning curve due to its extensive feature set
- Heavier resource usage compared to lightweight mobile apps
- Desktop-focused, lacking native mobile apps (though web-based viewer available)
Code Comparison
FlutterEbookApp (Dart/Flutter):
class BookListItem extends StatelessWidget {
final Entry entry;
BookListItem({Key key, @required this.entry}) : super(key: key);
@override
Widget build(BuildContext context) {
return Container(
// Widget implementation
);
}
}
Calibre (Python):
class BookList(QWidget):
def __init__(self, parent=None):
QWidget.__init__(self, parent)
self.layout = QVBoxLayout(self)
self.setLayout(self.layout)
def populate(self, books):
for book in books:
self.layout.addWidget(BookItem(book))
Both repositories focus on e-book management, but FlutterEbookApp is a mobile-first Flutter application, while Calibre is a comprehensive desktop e-book management suite. FlutterEbookApp offers a modern, lightweight mobile experience, whereas Calibre provides a feature-rich desktop solution with extensive library management capabilities.
An ebook reader application supporting PDF, DjVu, EPUB, FB2 and many more formats, running on Cervantes, Kindle, Kobo, PocketBook and Android devices
Pros of koreader
- More feature-rich and customizable e-reader application
- Supports a wider range of e-book formats, including PDF, EPUB, DJVU, and more
- Actively maintained with frequent updates and a large community
Cons of koreader
- More complex setup and configuration process
- Limited to specific devices and platforms (e-ink devices, Linux, macOS)
- Steeper learning curve for new users
Code Comparison
FlutterEbookApp (Dart):
class BookListItem extends StatelessWidget {
final Entry entry;
BookListItem({Key key, @required this.entry}) : super(key: key);
@override
Widget build(BuildContext context) {
return Container(
// Widget implementation
);
}
}
koreader (Lua):
local ReaderUI = require("apps/reader/readerui")
function ReaderUI:init()
self.doc_settings = DocSettings:open(self.document.file)
self.view = DocumentRegistry:openDocument(self.document)
-- Additional initialization
end
The code snippets showcase the different programming languages and approaches used in each project. FlutterEbookApp uses Dart with Flutter for cross-platform mobile development, while koreader uses Lua for its implementation on various devices and platforms.
Convert designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual CopilotREADME
ðð OpenLeaf (Flutter eBook App)
A simple Flutter app to Read and Download books. The Books included in the app are from the Public Domain (Expired Copyright and completely free).
The Feedbooks API was used to fetch books.
App
icon
To download this app, click here to see the codemagic builds. You can choose to install the apk
.
You can download from the appstore if you use an iPhone, iPad or a Mac with Silicon chip.
Please starâ the repo if you like what you seeð.
ð» Requirements
- Any Operating System (ie. MacOS X, Linux, Windows)
- Any IDE with Flutter SDK installed (ie. IntelliJ, Android Studio, VSCode etc)
- A little knowledge of Dart and Flutter
⨠Features
- Download eBooks.
- Read eBooks.
- Favorites.
- Dark Mode
- Swipe to delete downloads.
ð¸ ScreenShots
Light | Dark |
---|---|
Desktop
ð Plugins
Name | Usage |
---|---|
Riverpod | State Management |
Sembast | NoSQL database to store Favorites & Downloads |
XML2JSON | Convert XML to JSON |
DIO | Network calls and File Download |
Iridium Reader | Plug and play reader widget for epubs |
ð¤ Author(s)
ð LICENCE
Top Related Projects
A Java ePub reader and parser framework for Android.
Enhanced eBooks in the browser.
A cross platform desktop reading app, based on the Readium Desktop toolkit
The official source code repository for the calibre ebook manager
An ebook reader application supporting PDF, DjVu, EPUB, FB2 and many more formats, running on Cervantes, Kindle, Kobo, PocketBook and Android devices
Convert designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual Copilot