quran_kit
A complete, modular Quran toolkit for Flutter — rendering, audio, tafsir, search, word-by-word, reading tracker, and 35+ ready-made UI widgets. Import only what you need.
Features
| Feature | Details |
|---|---|
| Rendering | QFC4 fonts with tajweed coloring, 5 themes, auto night mode |
| Audio | 22 reciters, 3 quality levels, offline download, speed/repeat |
| Tafsir | 14 tafsir books with download & cache |
| Text | 40+ translation editions, embedded Uthmani + Simple Arabic |
| Word-by-word | Morphology data + word audio |
| Search | Arabic-aware with diacritic normalization, voice search |
| Reading | Daily wird goals, streaks, weekly/monthly stats |
| Widgets | 35 composable widgets + 6 ready-made screens |
Architecture
Three import tiers — use only what you need:
┌─────────────────────────────────────┐
│ screens.dart — 6 ready-made screens│
├─────────────────────────────────────┤
│ *_ui.dart — widgets per domain │
├─────────────────────────────────────┤
│ headless.dart — services only │
└─────────────────────────────────────┘
Quick Start
1. Install
dependencies:
quran_kit: ^0.1.0
2. Initialize
import 'package:quran_kit/kit.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await QuranKit.initialize(QuranKitConfig(
fontBaseUrl: 'https://github.com/user/repo/releases/download/v1.0.0',
));
runApp(const MyApp());
}
3. Use a ready-made screen
import 'package:quran_kit/kit.dart';
import 'package:quran_kit/screens.dart';
class QuranPage extends StatefulWidget {
const QuranPage({super.key});
@override
State<QuranPage> createState() => _QuranPageState();
}
class _QuranPageState extends State<QuranPage> {
final _controller = QuranReaderController();
@override
void initState() {
super.initState();
_controller.init();
}
@override
void dispose() {
_controller.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return QuranReaderScreen(
controller: _controller,
enableZoom: true,
onAyahTap: (surah, ayah) {
Navigator.push(context, MaterialPageRoute(
builder: (_) => AyahDetailsScreen(surah: surah, ayah: ayah),
));
},
);
}
}
4. Or compose your own UI
import 'package:quran_kit/rendering_ui.dart';
import 'package:quran_kit/audio_ui.dart';
import 'package:quran_kit/navigation_ui.dart';
// Use individual widgets:
QuranPageView(initialPage: 1, onPageChanged: (p) => ...)
QuranAudioPlayerBar(state: audioState, onPlayPause: () => ...)
QuranBottomInfoBar(theme: theme, currentPage: page, ...)
Import Guide
| Import | Contents |
|---|---|
quran_kit/headless.dart |
All services, zero widgets |
quran_kit/core.dart |
Metadata, models, storage, themes |
quran_kit/rendering.dart |
Font download, cache, load, render |
quran_kit/rendering_ui.dart |
Page widgets + hifz + sajda + zoom + dual |
quran_kit/audio.dart |
Audio service |
quran_kit/audio_ui.dart |
Audio bar + reciter picker + download |
quran_kit/tafsir.dart |
Tafsir service |
quran_kit/tafsir_ui.dart |
Tafsir sheet + picker |
quran_kit/text.dart |
Text/translation service |
quran_kit/text_ui.dart |
Edition picker |
quran_kit/search.dart |
Search engine + voice |
quran_kit/search_ui.dart |
Search bar + voice widget |
quran_kit/word.dart |
Word-by-word service |
quran_kit/word_ui.dart |
Word info sheet |
quran_kit/content.dart |
Asbab al-nuzul + khatma du'a |
quran_kit/content_ui.dart |
Asbab nuzul sheet |
quran_kit/reading.dart |
Wird tracker + stats + settings |
quran_kit/reading_ui.dart |
Tracker + stats + qiraa picker |
quran_kit/navigation_ui.dart |
Bookmarks, juz, surah index, theme picker, share |
quran_kit/theme.dart |
Auto night mode |
quran_kit/theme_ui.dart |
Night mode widget |
quran_kit/kit.dart |
QuranKitConfig + QuranKit + controller |
quran_kit/screens.dart |
6 ready-made screens |
Configuration
QuranKitConfig(
fontBaseUrl: 'https://...', // Required: CDN for QFC4 fonts
enableAudio: true, // Audio playback service
enableTafsir: true, // Tafsir (exegesis) service
enableSearch: true, // Full-text search
enableWordByWord: true, // Word-by-word data
enableAsbabNuzul: true, // Occasions of revelation
defaultReciterIndex: 0, // Mishary Alafasy
defaultTafsirId: 'al-tabari', // Default tafsir book
defaultEditionId: 'ar-uthmani', // Default text edition
defaultQiraa: 'hafs', // Default qira'a
defaultTheme: QuranThemes.parchment,// Reading theme
readingGoal: 20, // Daily pages goal
showTajweed: true, // Tajweed coloring
enableAutoNightMode: false, // Time-based dark mode
nightStartHour: 18, // Night start (6 PM)
nightEndHour: 6, // Night end (6 AM)
storage: null, // Custom QuranStorage (default: JSON file)
)
Ready-Made Screens
| Screen | Purpose |
|---|---|
QuranReaderScreen |
Full reader with page view, audio bar, navigation |
QuranSearchScreen |
Full-text search with filters |
QuranSettingsScreen |
Theme, reciter, translation, tafsir, font size |
AyahDetailsScreen |
Ayah text + translation + tafsir + word-by-word |
QuranBookmarksScreen |
Bookmark list with swipe-to-delete |
QuranDownloadsScreen |
Audio + text download management |
All screens support builder callbacks for customization:
QuranReaderScreen(
controller: controller,
appBarBuilder: (context, info) => AppBar(title: Text(info.surahName)),
bottomBarBuilder: (context, info) => MyBottomBar(info: info),
audioBarBuilder: (context, state) => MyAudioBar(state: state),
drawerBuilder: (context, info) => MyDrawer(),
);
Themes
5 built-in themes:
QuranThemes.emeraldNight // Dark green
QuranThemes.parchment // Classic beige
QuranThemes.midnight // Dark blue
QuranThemes.amoledDark // Pure black AMOLED
QuranThemes.daylight // Clean white
Or define your own:
QuranReadingTheme(
id: 'custom',
name: 'Custom Theme',
backgroundColor: Color(0xFFF5F5F5),
textColor: Color(0xFF333333),
accentColor: Color(0xFF1E88E5),
highlightColor: Color(0x331E88E5),
isDark: false,
)
Custom Storage
Implement QuranStorage to use your own persistence layer:
class HiveQuranStorage implements QuranStorage {
@override
Future<String?> getString(String key) async => box.get(key);
@override
Future<void> setString(String key, String value) async => box.put(key, value);
// ... implement all methods
}
await QuranKit.initialize(QuranKitConfig(
fontBaseUrl: '...',
storage: HiveQuranStorage(),
));
Data Sources
| Data | Source | Caching |
|---|---|---|
| Audio (22 reciters) | everyayah.com | Per-surah MP3 files |
| Translations (40+) | api.alquran.cloud | Per-edition JSON |
| Tafsir (14 books) | GitHub Releases CDN | Per-book JSON |
| Word-by-word | GitHub Releases CDN | Per-surah JSON |
| Asbab al-nuzul | GitHub Releases CDN | Single JSON |
| Word audio | audio.qurancdn.com | Streamed |
| QFC4 fonts | Configurable CDN | 5-page ZIP bundles |
| Arabic text | Embedded assets | In-memory (gzipped) |
Platform Support
| Platform | Status |
|---|---|
| Android | ✅ Supported |
| iOS | ✅ Supported |
| Web | ❌ Not supported (dart:io dependency) |
| Desktop | ⚠️ Untested |
Requirements
- Dart SDK
^3.7.1 - Flutter
>=3.0.0 - Network access on first run (font + data downloads)
License
MIT — see LICENSE.
Libraries
- audio
- Audio service — reciter management, ayah playback, auto-advance.
- audio_ui
- Audio UI layer — audio service + player bar + reciter picker widgets.
- content
- Content layer — asbab al-nuzul and khatma du'a.
- content_ui
- Content UI layer — asbab al-nuzul sheet, khatma du'a display.
- core
- Core data layer — pure Dart, no Flutter dependency.
- headless
- Headless (non-UI) exports — all services with zero Flutter widget dependency.
- kit
- Kit layer — configuration, initialization, and controller.
- Navigation & UX widgets — surah index, go-to-page, bookmarks, bottom info bar, juz list, reading progress, theme picker, share, and hizb navigator.
- quran_kit_pro
- quran_kit — A complete, modular Quran toolkit for Flutter.
- reading
- Reading tracker layer — daily wird, reading stats, khatma tracking, and settings.
- reading_ui
- Reading tracker layer UI — daily wird, reading stats, reading goals, qiraa selection.
- rendering
- Font rendering layer — download, cache and load QCF4 page fonts.
- rendering/quran_dual_page_view
- rendering/quran_zoom_page_view
- rendering_ui
- Rendering layer + ready-to-use page widgets.
- screens
- Ready-made screens — plug-and-play UI with builder customization.
- screens/ayah_details_screen
- screens/quran_bookmarks_screen
- screens/quran_downloads_screen
- screens/quran_reader_screen
- screens/quran_search_screen
- screens/quran_settings_screen
- search
- Search layer — Arabic-aware Quran search engine with diacritic normalization. Also provides voice search interface.
- search_ui
- Search UI layer — search engine + search bar widget.
- tafsir
- Tafsir service — 14 tafsir books, download & cache.
- tafsir_ui
- Tafsir service + ready-to-use tafsir sheet and picker widgets.
- text
- Text layer — Quran translation / text service for 35+ editions.
- text_ui
- Text UI layer — edition picker dialog for translation selection.
- theme
- Theme utilities — auto night mode based on time of day.
- theme_ui
- Theme UI layer — theme settings and night mode configuration widget.
- widgets/asbab_nuzul_sheet
- widgets/audio_player_bar
- widgets/basmallah_widget
- widgets/bookmarks_sheet
- widgets/bottom_info_bar
- widgets/continuous_player_widget
- widgets/edition_picker_dialog
- widgets/go_to_page_dialog
- widgets/hifz_mode_widget
- widgets/juz_list_view
- widgets/loading_placeholder
- widgets/offline_download_widget
- widgets/qiraa_picker_dialog
- widgets/quran_auto_night_mode_widget
- widgets/quran_page_view
- widgets/quran_page_widget
- widgets/quran_reading_stats_widget
- widgets/quran_wird_tracker_widget
- widgets/reading_progress
- widgets/reciter_picker_sheet
- widgets/sajda_indicator_widget
- widgets/search_bar
- widgets/surah_header_widget
- widgets/surah_index_sheet
- widgets/tafsir_picker_dialog
- widgets/tafsir_sheet
- widgets/theme_picker_sheet
- widgets/voice_search_widget
- widgets/word_info_sheet
- word
- Word-by-word service — word info, word audio.
- word_ui
- Word-by-word service + ready-to-use word info sheet widget.