An educational word-pronunciation game that makes practicing English more fun! Tap the mic, say the four displayed words aloud, and watch the robot walk as you get them right. Built with a modern Flutter 3 stack.
- 🎙️ Speech-to-Text — real-time recognition using the
speech_to_textpackage - 🤖 Rive Animations — animated background and robot that reacts to your voice
- 🧠 BLoC Architecture (v8) — clean event-driven state management with
flutter_bloc - ❄️ Freezed — immutable, code-generated events and states
- 🎮 Auto-advance game loop — all four words correct → 800 ms success pause → new set loads automatically
- 🌙 Null-safe Dart 3 — fully sound null-safe codebase
- 🎨 Beautiful dark UI — glassmorphism-style word cards with animated Rive backgrounds
| Platform | Status |
|---|---|
| Android | ✅ Supported (minSdk 21, targetSdk 36) |
| iOS | ✅ Supported (iOS 13.0+) |
| Web | ✅ Supported |
| Layer | Package |
|---|---|
| State management | flutter_bloc ^8.1.6 |
| Immutable models | freezed_annotation ^2.4.4 + freezed ^2.5.7 |
| Animations | rive ^0.13.15 |
| Speech recognition | speech_to_text ^6.6.2 |
| Word list | english_words ^4.0.0 |
| Code generation | build_runner ^2.4.9 |
- Flutter 3.10+ (tested on 3.24.4)
- Dart 3.0+
- Android Studio / Xcode for device builds
- Java 17 (required for Android Gradle 8.7 build)
# 1. Clone the repository
git clone https://github.com/j-j-gajjar/pronunciation_flutter_app.git
cd pronunciation_flutter_app
# 2. Install dependencies
flutter pub get
# 3. Generate Freezed & JSON code (REQUIRED — do this before running)
dart run build_runner build --delete-conflicting-outputs
# 4. (Optional) Generate app icons
dart run flutter_launcher_icons
# 5. (Optional) Generate native splash screen
dart run flutter_native_splash:create
# 6. Run the app
flutter runcd ios && pod install && cd ..
flutter run -d <your-ios-device>- Launch the app — four English words appear on screen.
- Tap the mic button 🎤 to start listening.
- Say each of the four words aloud (in any order).
- Words turn white as they are recognised correctly.
- Once all four are found, the game automatically loads a new set after a brief pause.
- Tap Skip at any time to jump to a new set of words.
lib/
├── features/
│ └── main_screen/
│ ├── blocs/
│ │ ├── main_screen_bloc.dart # BLoC logic & game engine
│ │ ├── main_screen_event.dart # All events (Freezed)
│ │ └── main_screen_state.dart # All states (Freezed)
│ └── main_screen.dart # Barrel export
├── ui/
│ └── main_screen/
│ ├── view/
│ │ └── main_screen_view.dart # Screen + _ListenedBody widget
│ └── widget/
│ ├── button_widget.dart
│ ├── display_word_widget.dart
│ ├── text_widget.dart
│ └── two_word_widget.dart
├── utils/
│ ├── color_const.dart
│ ├── default_text_const.dart
│ ├── rive_file_const.dart
│ └── utils.dart # Barrel export
└── main.dart
- App icon — https://in.pinterest.com/pin/818670038507629253/
- Rive Background — https://rive.app/community/1809-3568-cosmos/
- Rive Robot — https://rive.app/community/2271-4486-spaceman-test-test/
Pull requests are welcome! It usually takes 24–48 hours to respond to any issue or request.

