Skip to content

An English vocabulary learning app with Flutter, Firebase, BLoC and Clean Architecture.

Notifications You must be signed in to change notification settings

hizurk1/vocaday_app

Repository files navigation

Vocaday: English vocabulary app

📚 Welcome to Vocaday, your go-to English vocabulary learning app! 🌟

Vocaday is designed to make your English vocabulary learning experience effective and enjoyable. Whether you're a beginner or looking to enhance your language skills, Vocaday has got you covered.

To quickly view the user interface: link

banner

GitHub stars GitHub forks GitHub watchers

⬇️ Download

Google Play

📂 Folder Structure

Here's a simple folder structure of this project.

Note: it may has more folders and files in there

Click to expand
vocaday_app/
|-- assets/    # includes all asset or resource files
|-- lib/
|   |-- app/    # main 'things' in the app, will be changed dynamically
|   |-- core/    # core interface or other base things
|   |-- config/    # configs for the whole app
|   |-- features/    # the main features in the app, it should be independent on each other
|   |   |-- feature-1/
|   |   |   |-- data/
|   |   |   |   |-- data_sources/    # local or remote data call
|   |   |   |   |-- models/          # model for mapping json data
|   |   |   |   |-- repositories/    # implement interface of repositories in 'domain'
|   |   |   |-- domain/
|   |   |   |   |-- repositories/    # main function to handle result from 'data_source' and catch Exception then throw Failure
|   |   |   |   |-- entities/        # entity that be used in the app
|   |   |   |   |-- usecases/        # the usecase for each requirements
|   |   |   |-- presentation/
|   |   |   |   |-- blocs/           # state management
|   |   |   |   |-- pages/           # includes concrete screen of this feature
|   |   |   |   |-- widgets/         # includes local widget of this feature
|   |   |-- feature-2/
|   |   |-- ...
|   |-- app.dart    # whole app endpoint, for setup
|   |   ...
|   |-- main.dart
|-- test/    # to test (currently unit test)
|-- pubspec.yaml

🔗 Resource

Here's some sources for assets folder.

⚙️ Setup

Get started with Vocaday by following these simple steps:

  1. Install FlutterFire CLI & Firebase:

  2. Clean and Get Dependencies:

    flutter clean
    flutter pub get
  3. Run the App:

    flutter run
  4. (Optional) to build .apk file:

    flutter build apk

🪲 Debug/Release

Generate debug.keystore:

keytool -genkey -v -keystore "android\app\debug.keystore" -storepass android -keypass android -keyalg RSA -keysize 2048 -validity 10000 -alias androiddebugkey -dname "CN=Android Debug,O=Android,C=US"

Get SHA-1 or SHA-256 fingerprint:

keytool -list -v -keystore "android\app\debug.keystore" -alias androiddebugkey -storepass android -keypass android

If Google Sign In did not work, try to run these commands:

cd android
./gradlew signingReport

Then use the SHA-1/SHA-256 with tag 'Config: debug' to update fingerprints on your Firebase project.

💻 Code Generation

  • Easy_localization:

    If you make any changes from any translation files. To update the new changes, run those commands below in order:

  1. Generate Loader class:

    dart run easy_localization:generate -S "assets/translations" -O "lib/app/translations"
  2. Generate Keys class:

    dart run easy_localization:generate -S "assets/translations" -O "lib/app/translations" -o "locale_keys.g.dart" -f keys -u true

    For detailed information, refer to the easy_localization documentation.

    Arguments Short Default Description
    --help -h Help info
    --source-dir -S resources/langs Folder containing localization files
    --source-file -s First file File to use for localization
    --output-dir -O lib/generated Output folder stores for the generated file
    --output-file -o codegen_loader.g.dart Output file name
    --format -f json Support json or keys formats
    --[no-]skip-unnecessary-keys -u false Ignores keys defining nested object except for plural(), gender() keywords
  • Flutter Gen:

    If you add any files to the assets folder, then you would need to add its path to the generated class (to avoid hard-code), run those commands below in order:

    Activate flutter_gen (only once):

    dart pub global activate flutter_gen
  1. Run build_runner:

    dart run build_runner build --delete-conflicting-outputs
  2. Generate Assets:

    fluttergen -c pubspec.yaml

⛄️ FAQs

  1. Q: How to fix "Gradle sync failed: Could not create task..." error when opening project with Android Studio?

    A: Delete .gradle & .build folders inside android folder, then run those command below in order:

    flutter clean
    flutter pub get

    Right-click on the android folder and select Open in Android Studio.

    flutter clean
    flutter pub cache repair

    After that, select File -> Invalidate Caches... -> ✓ Check all -> Invalidate and Restart.

👀 User Interface

Vocaday currently offers a clean and intuitive user interface with these main pages:

  1. Main Page (Home, Activity, Search):

home

  1. Learning Page (Quiz, Puzzle, Flashcard):

learning

  1. Word Page (Detail, Wordbag, Setting):

word

Visitors

Visitor Count

About

An English vocabulary learning app with Flutter, Firebase, BLoC and Clean Architecture.

Topics

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages