A cross-platform manga reader built with Flutter.
This app is a Flutter clone of Tachiyomi mainly to provide an iOS version of the app.
This project is still a work in progress.
WIP
Views | Light | Dark | Pure Dark |
---|---|---|---|
Library | ![]() |
![]() |
![]() |
Explorer | ![]() |
![]() |
![]() |
Details | ![]() |
![]() |
![]() |
Reader | ![]() |
![]() |
![]() |
History | ![]() |
![]() |
![]() |
WIP
Source | Supported |
---|---|
Asura Scans | 🔴 |
DragonTea | 🔴 |
EarlyManga | 🔴 |
MangaBat | ✅ |
MangaDex | ✅ |
Mangahere | 🔴 |
Mangairo | ✅ |
Mangakakalot | ✅ |
Manganato | ✅ |
Webtoons.com | 🔴 |
WIP
- Import manga & chapters from a Tachiyomi/Mihon backup
- Global update of chapters
- Webtoon and paginated manga reading
- Download manga chapters for offline reading
- Reading history
- Language support for English and French
- Light and dark themes
- Pure Dark theme
This project contains 3 flavors:
- dev
- staging
- prod
To run the desired flavor either use the launch configuration in VSCode/Android Studio or use the following commands:
# Development
$ flutter run --flavor dev --target lib/main_dev.dart
# Staging
$ flutter run --flavor staging --target lib/main_staging.dart
# Production
$ flutter run --flavor prod --target lib/main_prod.dart
This project relies on flutter_localizations and follows the official internationalization guide for Flutter.
- To add a new localizable string, open the
app_fr.arb
file atlib/l10n/arb/app_fr.arb
.
{
"@@locale": "fr",
"counterAppBarTitle": "Compteur"
}
- Then add a new key/value and description
{
"@@locale": "fr",
"counterAppBarTitle": "Compteur",
"helloWorld": "Bonjour le monde"
}
- Generate the strings
$ flutter gen-l10n
- Use the new string
import 'package:flutter_manga_reader/core/core.dart';
@override
Widget build(BuildContext context) {
final strings = context.strings;
return Text(strings.helloWorld);
}
Update the CFBundleLocalizations
array in the Info.plist
at ios/Runner/Info.plist
to include the new locale.
<key>CFBundleLocalizations</key>
<array>
<string>en</string>
<string>fr</string>
</array>
- For each supported locale, add a new ARB file in
lib/l10n/arb
.
├── l10n
│ ├── arb
│ │ ├── app_en.arb
│ │ └── app_fr.arb
- Add the translated strings to each
.arb
file:
app_en.arb
{
"@@locale": "en",
"counterAppBarTitle": "Counter"
}
app_fr.arb
{
"@@locale": "fr",
"counterAppBarTitle": "Compteur"
}
This project uses multiple code generation tools:
- flutter_gen_runner: To generate type-safe access to assets
- freezed: To reduce the boilerplate when writing override of
toString
,==
,hashCode
andcopyWith
methods - go_router_builder: To generate type-safe routes
- json_serializable: To generate type-safe JSON serialization/deserialization
- theme_tailor: To reduce the boilerplate when writing
ThemeExtensions
s
All of these tools will generate code when running the following command:
$ dart run build_runner build
This project uses flutter_launcher_icons to generate the app icons. To modify the icons follow these steps:
-
Replace the
icon.png
file atassets/launcher_icons/icon.png
with your own icon. And edit the options inpubspec.yaml
how you see fit. -
Run the following command:
$ dart run flutter_launcher_icons
This project uses flutter_native_splash to generate the splash screens. To modify the splash screens follow these steps:
-
Replace the
splash.png
file atassets/splash/splash.png
with your own splash screen. And edit the options inpubspec.yaml
how you see fit. -
Run the following command:
$ dart run flutter_native_splash:create
This project is licensed under the Apache License 2.0 - see the LICENSE file for details.
- Tachiyomi: For providing the inspiration for this project
- MangaDex: For providing the API used in this project
The developer of this application does not have any affiliation with the content providers available.