A modern gamified learning application built with Flutter and Firebase, featuring courses, quizzes, achievements, and leaderboards to make learning fun and engaging.
- Email/Password login and registration
- Password reset via email
- Secure Firebase Authentication
- Auto-login for returning users
- Courses: Browse and enroll in various courses
- Lessons: Interactive lesson viewer
- Quizzes: Test your knowledge with timed quizzes
- Progress Tracking: Monitor your learning journey
- Points & Coins: Earn rewards for completing activities
- Levels: Progress through levels as you learn
- Achievements: Unlock badges and milestones
- Leaderboard: Compete with other learners
- Streaks: Maintain daily learning streaks
- Daily Challenges: Complete daily tasks for bonus rewards
- Settings Page: Customize your preferences
- Dark Mode: Toggle between light and dark themes
- Profile Management: View your stats and progress
- Responsive Design: Works on mobile, tablet, and web
lib/
โโโ app/
โ โโโ data/
โ โ โโโ models/ # Data models (User, Course, Quiz, etc.)
โ โ โโโ services/ # Firebase & local storage services
โ โโโ routes/
โ โ โโโ app_pages.dart # Route definitions
โ โ โโโ app_routes.dart # Route constants
โ โโโ middleware/ # Auth middleware
โโโ core/
โ โโโ constants/ # App constants (Firebase collections, etc.)
โ โโโ theme/ # App theme configuration
โโโ presentation/
โ โโโ auth/ # Authentication pages
โ โโโ main/ # Main page with navigation
โ โโโ pages/ # Feature pages (Courses, Quizzes, etc.)
โ โโโ controllers/ # GetX controllers
โ โโโ bindings/ # Dependency injection bindings
โโโ main.dart # App entry point
Architecture Pattern: Clean Architecture + MVVM
State Management: GetX
Backend: Firebase (Auth + Firestore)
- Flutter SDK (3.0 or higher)
- Dart SDK (3.0 or higher)
- Firebase account
- Android Studio / VS Code
- Git
-
Clone the repository
git clone https://github.com/smone-jovan/learning_app.git cd learning_app -
Install dependencies
flutter pub get
-
Firebase Setup
a. Create a new Firebase project at Firebase Console
b. Enable Authentication (Email/Password)
c. Create a Firestore Database
d. Download and add Firebase configuration files:
- Android:
google-services.jsonโandroid/app/ - iOS:
GoogleService-Info.plistโios/Runner/ - Web: Copy Firebase config to
web/index.html
- Android:
-
Configure Firestore Security Rules
Go to Firebase Console โ Firestore Database โ Rules, and paste:
rules_version = '2'; service cloud.firestore { match /databases/{database}/documents { function isAuthenticated() { return request.auth != null; } function isOwner(userId) { return request.auth.uid == userId; } match /users/{userId} { allow read: if isAuthenticated(); allow create, update: if isAuthenticated() && isOwner(userId); } match /courses/{courseId} { allow read: if isAuthenticated(); } match /achievements/{achievementId} { allow read: if isAuthenticated(); } match /user_achievements/{userAchievementId} { allow read, create, update: if isAuthenticated() && resource.data.userId == request.auth.uid; } match /leaderboard/{userId} { allow read: if isAuthenticated(); } } }
-
Run the app
flutter run
users/
โโโ {userId}/
โ โโโ email, displayName, photoURL
โ โโโ points, coins, level
โ โโโ currentStreak, longestStreak
โ โโโ enrolledCourses[], completedQuizzes[]
courses/
โโโ {courseId}/
โ โโโ title, description, instructor
โ โโโ category, difficulty, duration
โ โโโ thumbnailURL, enrolledCount
achievements/
โโโ {achievementId}/
โ โโโ title, description, category
โ โโโ requirement, pointsReward, coinsReward
โ โโโ iconURL, rarity
user_achievements/
โโโ {userAchievementId}/
โ โโโ userId, achievementId
โ โโโ unlockedAt, isClaimed, claimedAt
leaderboard/
โโโ {userId}/
โ โโโ displayName, photoURL
โ โโโ totalPoints, level, rank
โ โโโ lastUpdated
daily_challenges/
โโโ {YYYY-MM-DD}/
โ โโโ quizId, title, description
โ โโโ pointsReward, coinsReward
โ โโโ expiresAt
| Category | Technology |
|---|---|
| Framework | Flutter 3.x |
| Language | Dart 3.x |
| State Management | GetX |
| Backend | Firebase |
| Authentication | Firebase Auth |
| Database | Cloud Firestore |
| Storage | Shared Preferences |
| UI Components | Material Design 3 |
dependencies:
flutter:
sdk: flutter
# State Management
get: ^4.6.6
# Firebase
firebase_core: ^2.24.2
firebase_auth: ^4.16.0
cloud_firestore: ^4.14.0
# Local Storage
shared_preferences: ^2.2.2
# UI
google_fonts: ^6.1.0
# Utilities
intl: ^0.18.1Contributions are welcome! Please follow these steps:
- Fork the repository
- Create a feature branch (
git checkout -b feature/AmazingFeature) - Commit your changes (
git commit -m 'feat: add AmazingFeature') - Push to the branch (
git push origin feature/AmazingFeature) - Open a Pull Request
This project is licensed under the MIT License - see the LICENSE file for details.
Your Name
- GitHub: @SMONE
- Email: ntar aja
- Flutter team for the amazing framework
- Firebase for backend services
- GetX community for state management solution
- Material Design 3 for UI components
- All contributors and testers
If you like this project, please give it a โญ on GitHub!
For issues and feature requests, please use the Issues page.
Made with โค๏ธ and Flutter