A flashcards companion app tailored for Minna no Nihongo Shokyū Ⅰ & Ⅱ
textbooks.
❄︎
Got a vocab test looming in your Japanese class ? Feeling overwhelmed by the mountain of words in your Minna no Nihongo
lessons and not sure where to start ?
Worry no more, there's an app for that !
This readme mostly discusses technical stuff 🧙♂️
Should you simply wish to give the app a whirl, your journey awaits beneath –
⥼ Web version ⥽
Note – You may also use the web version on Android.
hifumi was meant to be a replacement for Minna no Flashcards, reworked with the whole fifty lessons of the Minna no Nihongo Shokyū
books.
And well, that is what it ended up being, but an overengineered one for sure !
It also packs additional quality of life features, such as being able to create custom lists of words to study (called decks), opening Jisho.org with the click of a button, and more !
The web app requires no particular installation.
A prebuilt version is also offered in the releases. It can be used locally by running something like python3 -m http.server
in the root of the folder.
- Head over to the releases page.
- Grab the right
apk
for you phone's CPU architecture. If unsure, get thearm64-v8a
version, this corresponds to what most smartphones run on nowadays. - Install it like you would with any other
apk
file. Opening it from your device's file manager usually does the trick.
At the moment, only precompiled binaries for Android and Web are offered. Therefore, the Web version should be used on all other platforms. If you'd like to see a platform added, you're welcome to open an issue :)
Interested in modifying the source or building the app yourself ?
You will need a working copy of the Dart SDK and Flutter SDK, with Web
and Android
development set up. If you're new to this don't worry, it is pretty straightforward to set up, check out Install | Flutter.
- Clone the repository :
git clone --recurse-submodules https://github.com/vitto4/hifumi.git && cd hifumi
- Get dependencies :
flutter pub get
- You are now ready to
flutter run
🎉
If you end up modifying an icon, you may also need to flutter pub run flutter_launcher_icons
.
For the detailed build process, take a look at the build workflows in .github/build-*.yml
.
tl;dr your usual flutter business, except a few things are overwritten here and there.
As for the Pages, it is more of a rolling release and may be deployed whenever from the main branch.
A couple of things I may get to someday
- For the
Web
release, compile to Wasm once compatibility spans all browsers (see Wasm | Flutter). - Make use of macros to write the version number and commit hash to
app_info.dart
at compile time, instead of relying on external tools in the build workflows. - Include a dark theme.
- Look into adding iOS as a build target (would need sideloading support first though).
I might have got a little carried away when deciding on folder names, so here's a much-needed file structure overview !
Show structure
.
lib/
├── entities/ # Definitions, defaults, concepts and building blocks for the rest of the code.
│
├── pages/ # Pages of the app.
│
├── services/ # Utility services for the app, including interfacing with the dataset, data storage, layout management, and more.
│
├── widgets/
│ ├── archipelago/ # Home for island-style widgets, including containers, buttons, segmented selectors, etc.
│ │
│ ├── casino/ # (Flash)cards related widgets.
│ │
│ ├── drawer/ # Widgets related to sheet dialogs (and thus to quick-settings menus).
│ │
│ ├── roofing/ # Tile widgets. (word-, lesson-)
│ │
│ ├── seasoning/ # Catch-all for miscellaneous widgets sprinkled throughout the app.
│ │
│ ├── settings/ # Settings-specific widgets.
│ │
│ ├── topping/ # Widgets placed at the top of various pages.
│ │
│ └── *.dart # Various widgets that didn't fit in categories described above.
│
└── main.dart
-
I have come to the realisation that UI/UX design is very much not easy (ᴗ.ᴗ). Thus, I've « borrowed » the design language from a suspiciously intimidating Owl.
Dear Duo,
Please don't come for me, I did my lesson today, and if the borrowing isn't fine I'll happily comply !
Thankies :3(fancy reaching out ? claim your Free OSINT Technique™)
-
The dataset from which all words are sourced lives on GitHub as a separate project :
MinnaNoDS
. -
Files starting with an
@
symbol are definitions of basic concepts and building blocks for the app. I wanted them grouped together. It may not be pretty, but it works c: -
To save on asset size, fonts have been subsetted.
- Noto Serif Japanese to
あ
- New Tegomin to
あ字言葉準備中.
- Noto Sans Japanese to whatever
noto_sans_JP
ends up being.
See also
fonts_subsetting.py
andfonts-subsetting.yml
. - Noto Serif Japanese to
-
Some widgets should be easy to reuse standalone in another app. These include
swipeable.dart
andisland_container.dart
. If these sound like they could be useful for your project, be sure to take a look !
You're very welcome to pitch in !
That being said, as I'm still pretty new to everything flutter and app development, the code can be a bit all over the place ; so proceed at your own risks (:
Also I probably won't devote much time to this project in the near future, so please bear with me if I'm slow on the reply ^-^