A Flutter-based language learning app focused on effective memorization through flashcards and spaced repetition.
- ✅ Manual word creation with optional examples
- ✅ Active recall flashcards (tap to reveal)
- ✅ Intuitive swipe gestures:
- Swipe RIGHT → Mark as "Known" (spaced repetition)
- Swipe LEFT → Archive word
- TAP → Flip card to see translation
- ✅ Spaced repetition algorithm (SM-2 inspired)
- ✅ Streaks and daily statistics
- ✅ Offline-first local storage (Hive)
- ✅ Clean, minimal UI
- Flutter SDK (latest stable)
- Android Studio / Xcode for mobile development
- Install Flutter dependencies:
flutter pub get- Generate Hive adapters (required for data models):
flutter pub run build_runner build --delete-conflicting-outputs- Run the app:
flutter runThe app follows clean architecture principles with clear separation of concerns:
- Entities: Core business objects (
Flashcard,UserStats) - Repositories: Abstract interfaces for data access
- Services: Business logic (spaced repetition algorithm)
- Models: Hive-annotated data models
- Repositories: Concrete implementations using Hive storage
- Database: Hive initialization and setup
- Screens: Main UI screens (Practice, Add Word, Stats)
- Widgets: Reusable components (FlashcardWidget, SwipeableFlashcardStack)
- Providers: Riverpod state management
- Navigation: GoRouter configuration
- Swipe Gestures: Smooth pan gestures with visual feedback
- Card Flip: 3D flip animation on tap
- Threshold-based: Prevents accidental swipes
Based on SM-2 algorithm with adjustments:
- Initial ease factor: 2.5
- Correct answer: Increases ease factor, extends interval
- Incorrect answer: Decreases ease factor, resets to 1 day
- Intervals: 1 day → 6 days → exponential growth
- Hive: Fast, lightweight NoSQL database
- Offline-first: All data stored locally
- Type-safe: Generated adapters for models
lib/
├── data/
│ ├── database/
│ ├── models/
│ └── repositories/
├── domain/
│ ├── entities/
│ ├── repositories/
│ └── services/
├── presentation/
│ ├── navigation/
│ ├── providers/
│ ├── screens/
│ └── widgets/
└── main.dart
Using Riverpod for state management:
flashcardNotifierProvider: Manages flashcard list and operationsuserStatsProvider: Tracks user statisticsallFlashcardsProvider: Provides all flashcards for stats
- Multiple language support
- Import/export flashcards
- Audio pronunciation
- Dark mode
- Cloud sync
- Advanced statistics and analytics