Nano Banana Pro
Agent skill for nano-banana-pro
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
Sign in to like and favorite skills
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
This is a Flutter application for learning the Lao language through interactive exercises. The app teaches Lao letters through various exercise types including letter recognition, sound matching, and visual matching exercises.
flutter run # Run the app in debug mode # Always use run mode instead of build when debugging. If no emulator is open, use the medium emulator. flutter run --release # Build release APK/IPA
flutter pub get # Install dependencies flutter pub upgrade # Upgrade dependencies flutter clean # Clean build files flutter analyze # Run static analysis dart format . # Format code (applies to entire codebase)
flutter test # Run all unit tests flutter test --coverage # Run tests with coverage report
The app follows a layered architecture:
Presentation (pages, components) → Business Logic (exercises, lesson generation) → Data (utilities, Hive)
Key directories:
App uses bottom navigation (DefaultPage widget) with page switching:
All exercises inherit from
StatefulExercise abstract class:
UniqueKey() to force proper widget rebuildingshowBottomBar() displays feedback messages with onShow/onHide callbacksbottomSheetContent() and build() are abstract, implemented by subclassesExercise Types:
LearnConsonantExercise / LearnVowelExercise: Visual + audio introductionSelectLetterExercise: Multiple choice letter recognitionSelectSoundExercise: Audio-based letter identificationMatchingExercise: Drag-and-drop letter pairingSpellingExercise: Word spelling with letter combinationsLessonGenerator (lesson_generators/lesson_generator.dart):
LessonData (utilities/lesson_data.dart):
LetterData (utilities/letter_data.dart):
Provider Pattern:
ThemeProvider: Manages dark/light mode, persists to Hive 'settings' boxLessonProvider: Holds callbacks (nextExercise, markExerciseAsMistake) for exercise navigationHive Persistence:
lesson_completion box: Boolean map of lesson index → completion statussettings box: User preferences (theme)HiveUtility provides convenience methods: isLessonCompleted(), setLessonCompleted(), getLastLessonComplete(), clearAllData()Reactive Updates:
ValueListenableBuilder on Hive box for real-time lesson status updatesThree main methods:
playLetter(Letter): Consonant (assets/consonants/sounds/{romanization}.wav) or vowel (assets/vowels/sounds/{index}.wav)playSoundEffect(String): UI feedback sounds (correct/incorrect/complete)playWord(String): Word pronunciation (assets/words/{word}.mp3)Uses AudioPlayer singleton with AssetSource for all audio.
assets/ ├── consonants/images/ # SVG/PNG images for consonants ├── consonants/sounds/ # WAV audio files for consonant pronunciation ├── vowels/sounds/ # WAV audio files for vowel pronunciation ├── words/ # MP3 files for word pronunciation ├── sound_effects/ # Correct/incorrect/complete WAV files └── fonts/NotoSansLaoLooped/ # Lao-specific font files
| Package | Purpose |
|---|---|
| State management (ThemeProvider, LessonProvider) |
| Audio playback for letter pronunciation and UI feedback |
| Local database for lesson completion and settings |
| Celebration animations on lesson completion |
| Toast notifications for user feedback |
| Utility functions (used for shuffling) |
| Vibration feedback for interactions |
| SVG rendering (included for future use) |
StatefulExercisebottomSheetContent() (feedback UI) and build() (exercise UI)LessonGenerator.generateLesson()context.read<LessonProvider>().nextExercise() when completeLetterData (consonant teaching order or vowel mapping)assets/ directoryLessonGenerator to include new letter in appropriate lesson positionassets/consonants/sounds/{romanization}.wavassets/vowels/sounds/{index}.wavassets/sound_effects/{name}.wavassets/words/{word}.mp3