A simple app for studying the japanese vocabulary you will learn in your japanese learning journey based on cards with meaning, pronunciation and kanji.

Overview

KanPractice

A simple app for studying the japanese vocabulary you will learn in your japanese learning journey based on cards with meaning, pronunciation and kanji.

Build your own word or sentences lists and study them whenever you want.

Screenshots

Making your own KanPractice

If you want to replicate this app on your device with a custom back-end, fork the repo and include your own Google Services files for iOS or Android. Make sure your back-end matches the models described in code, although you can also change them to match yours!

If you wish to distribute a new app based on this one, remember to change the Bundle ID on iOS and Package on Android and make sure to acknowledge this work on your newly created app!

  • For iOS: make sure you create your own Provisioning Profile and Certificate for Apple devices and export them to XCode.
  • For Android: create the jks file for signing using keytool, and create the key.properties file under android/ as in the official documentation.

Code Structure for Contributing

Code is based on 2 main folders: ui and core, with self explanatory meanings. On main.dart you will find the main Widget that runs the app with all of its configuration.

Language Addition

The language management system is handled by JSON files located under lib/core/localization/. Current languages are Spanish and English. Contribution needed for more languages to be added.

If you wish to contribute by adding a new language, you must perform these actions:

  • Copy and paste an already added language JSON file and create the new language file with the name: .json .
  • Then, add the language into the supported locales in lib/main.dart under the EasyLocalization widget.
  • You are good. In case you want to build the app for iOS, you must include the localization in the info.plist under the key CFBundleLocalizations.

Core

Subdivided in:

  • database: related code for database management (creation of db, queries, db models and helper constants).
  • firebase: related code for firebase and backup management (services of back up and authentication, queries and firebase models).
  • preferences: related code for the Shared Preferences helper to store key-value data in the device.
  • routing: related code for managing the routing of the pages of the app.
  • utils: code that is purely functional and that is used across the app.

Please, refer to the comments to better understand the code.

UI

Subdivided in:

  • pages: the different pages are subdivided in their respective folder, each one having their own bloc management (when needed).
  • theme: purely UI code as colors, theming, heights...
  • widgets: UI components with functional elements that are reused across the app.
Comments
  • Correct German translations for 1.1.0

    Correct German translations for 1.1.0

    Hey there @aruffj, hope you are doing well! Version 1.1.0 is coming hot and I would love that you review the german translations I made using DeepL. Whenever this is done, please, create a PR to the branch 1.1.0 :). Thank you very much in advance!!!

    enhancement 
    opened by gabrielglbh 9
  • Make KanLists available for everyone to download in an in-app market

    Make KanLists available for everyone to download in an in-app market

    As in Anki, you could download already made up KanLists to study them, completely free.

    A user would upload their desired KanLists to a "market" and any user who searches for that KanList, would be able to download it to its device and study it.

    enhancement hard On debate 
    opened by gabrielglbh 4
  • Show the list of kanji that appeared on the test on results page

    Show the list of kanji that appeared on the test on results page

    Under the TestResultPage, it would be nice if we could see the kanji or words that appeared on the test, divided by the list from which each kanji is from and with the color label of it.

    enhancement 
    opened by gabrielglbh 3
  • Update Tutorial, Google Play Photos and Fix Minor Errors to launch 1.1.0.

    Update Tutorial, Google Play Photos and Fix Minor Errors to launch 1.1.0.

    As new functionality comes, we have to update the tutorial (somehow make it less tedious) and update the Google Play's images to reflect the actual UI.

    enhancement 
    opened by gabrielglbh 2
  • Add Jiisho to each word in practice mode only

    Add Jiisho to each word in practice mode only

    It would be nice to have a Jiisho integration to look up phrases and words in the dictionary for further study and understanding.

    See the package on pub.dev

    enhancement hard 
    opened by gabrielglbh 2
  • Hot fixes

    Hot fixes

    • Updated BLOC library to 8.0.0
    • Refactored and generalized validation buttons and animated them
    • Animated appearance kanji on list details
    • Enabled "Try Again" button when loading fails
    • Created a bunch of constants for keeping the code clean:
      • Margins
      • FontSizes
      • CustomSizes
      • ChartSizes
      • CustomRadius
      • CustomColors
      • CustomAnimations
      • DatabaseConstants
    • Wrapped all dialogs to resize to its content
    • Animated information headers in all learning modes as cards
    • Cleaned the UI margins on learning modes
    • Updated DB models with build_runner
    opened by gabrielglbh 2
  • 2.2.1

    2.2.1

    Additions:

    • Folder specific tests
    • Allow userrs to type in the dictionary
    • Daily Tests (Mix between Remembrance and Less %)
    • Added notifications
    • Added new Study Mode: Speaking
    opened by gabrielglbh 1
  • Add SM2 as spaced repetition algorithm for studying KanLists

    Add SM2 as spaced repetition algorithm for studying KanLists

    If including this, there should be 3 methods of studying: Randomized, Spatial (less pct first) and SM2 (to be redefined in app).

    I may include the SM2 algorithm as a BLOC event to calculate the iterations.

    enhancement hard 
    opened by gabrielglbh 1
  • Make dialogs to guide the user on first usage of the app

    Make dialogs to guide the user on first usage of the app

    Various users have reported that the initial app is confusing, as the users do not know how to begin with or how the app even works.

    We could make some mandatory dialogs explaining how to:

    • Purpose of the app
    • Add a KanList and why
    • Add vocabulary on a list and why
    • Perform tests and practice
    enhancement 
    opened by gabrielglbh 1
  • Add Kanji OCR to make a proper handwritten based dictionary

    Add Kanji OCR to make a proper handwritten based dictionary

    As a niche addition to the app, we could create a section solely to search new kanji and see its meaning through Jisho API, a dictionary. The user could add that kanji to whatever KanList he or she wants and get to study it right away.

    Needs:

    • tflite
    • Pre-trained Kanji Tensorflow Model (from this repo) thanks to ichisadashioko.
    • Canvas to paint the unknown character
    enhancement hard 
    opened by gabrielglbh 1
  • Make tests with vocabulary the user has not seen in a long time

    Make tests with vocabulary the user has not seen in a long time

    We would need to add a new variable to Kanji: dateShown as an int in milliseconds. This variable for a certain word A should update everytime the user practices or makes tests with A in it. When validating A, the variable should update to DateTime.now().toMilliseconds().

    This will be later used in a simple query to gather all words in the vocabulary ordered ASC and taking the first 30. In this way, the test will contain the 30 least seen words of the user's vocabulary, thus making the user remember those.

    enhancement 
    opened by gabrielglbh 1
Releases(v4.0.2)
Owner
Gabriel García
Creator of OP Crew Planner, You Say IT! and KanPractice. In ❤️ with Flutter.
Gabriel García
A cross-platform BlockChain Based Application that performs Data and Sentimental Analysis using Machine Learning Algorithms.

DynaMedico Mobile App A new Flutter application. Getting Started This project is a starting point for a Flutter application. A few resources to get yo

null 6 May 10, 2022
A flutter quiz app that helps you learn about the City of Munich

MucQuiz MucQuiz is a quiz app that helps you learn about the City of Munich. It is a submission for the City of Munich challenge at hackaTUM 2021. Scr

Robin Holzinger 10 Sep 6, 2022
Learn how to integrate horizontal & vertical dividers for the widgets in your Flutter app.

Divider - Horizontal & Vertical - Deep Dive - Flutter Learn how to integrate horizontal & vertical dividers for the widgets in your Flutter app. ⚡  So

Johannes Milke 4 Dec 19, 2020
An app to get you the latest and the trending news based on your location.

An app to get you the latest and the trending news based on your location.

Ayush Shekhar 19 Nov 11, 2022
This app it's a simple app to help you choose between alcool or gasoline based on the price of the gasoline and the price of the alcool.

This app it's a simple app to help you choose between alcool or gasoline based on the price of the gasoline and the price of the alcool. It's a simple app that uses a simple logo, two text fields and a button that calculate and show the best option.

Cácio Lucas 0 Oct 3, 2021
mezza 0 Nov 24, 2021
2 screens you maybe find useful wan you plan to build your flutter app

2 screens to a travel application 2 screens you maybe find useful wan you plan t

Abdelghani meliani 5 Nov 14, 2022
Flutter-based mobile app displaying a list of daily curated content from top engineering blogs and articles. Backed by a GraphQL-based API written in Kotlin..

Flutter-based mobile app displaying a list of daily curated content from top engineering blogs and articles. Backed by a GraphQL-based API written in Kotlin..

Armel Soro 20 Dec 14, 2022
BMI App - The personal documentation while learning Multi Provider with Flutter by making BMI Calculator app

BMI App - The personal documentation while learning Multi Provider with Flutter by making BMI Calculator app

null 0 Feb 13, 2022
In this tutorial we will be reviewing Stateful and Stateless Widgets as well as learning about the fundamental building blocks of Object Oriented Programming (OOP

In this tutorial we will be reviewing Stateful and Stateless Widgets as well as learning about the fundamental building blocks of Object Oriented Programming (OOP) - Classes and Objects.

pedrozopayares 0 Oct 3, 2021
Create an Invoice PDF Document completely with Flutter and learn how to generate and view this invoice in Flutter.

Create an Invoice PDF Document completely with Flutter and learn how to generate and view this invoice in Flutter.

Johannes Milke 124 Jan 4, 2023
Tried my hands first time on Machine Learning 🤖. It's an Face Detection app 😀which higlights the face of a person from image 🖼️.

Flutter Face Detector ML This is the source code for Flutter Face Detector ML. App Features Select Images From Gallery. Detecting All Faces In Image A

Nikhil Pawar 5 Apr 20, 2021
This is the semester 6 Mobile App Development Course project. So maybe the final project may not make sense ;) but it is a good place to start learning Flutter.

?? Overview MAD-Sem6 is a Mobile Development Course Project that contains Basic ➡️ Medium implementation of different widgets. As a whole it doesn't m

Muhammad Tayyab Asghar 3 Aug 9, 2021
Food App Demo for learning Flutter

foodapp_demo Food App Demo for learning Flutter Slicing UI SetState StateFull Widget LINK TUTORIAL https://www.youtube.com/watch?v=1Xd15C2k4OU&list=PL

Ronaldi 1 Mar 12, 2022
This is the self learning of mine about Dart Language

Dart Tutorial These are dart files what iam self studied And I think to share my knowlage with others from sharing this repo as public Still Adding so

Madhusha Prasad 6 Nov 6, 2022
A counter app to learn Flutter Bloc Concepts

counter A counter app to learn Flutter Bloc Concepts Flutter Bloc Crash Course Short Notes For every interaction, the app should be in a different sta

Imali Susan 0 Oct 24, 2021
The objective of this tutorial is to learn about asynchronous programming in Dart.

The objective of this tutorial is to learn about asynchronous programming in Dart. We'll look at how to carry out time consuming tasks such as getting device location and networking to get data from the internet.

Hritik Kumar 1 Oct 5, 2021
Learn how to incorporate Firebase into our Flutter apps

Flash Chat ⚡️ Our Goal The objective of this tutorial is to learn how to incorporate Firebase into our Flutter apps. We'll be using Firebase Cloud Fir

null 0 Oct 27, 2021