A Flutter mobile application that connects people who want to exchange skills. Users can discover others with complementary expertise, request skill-swap sessions, communicate via real-time chat, join live video sessions, and build a gamified profile with points and badges.
- Team Members
- Features
- Screenshots
- Supported Platforms
- Architecture
- Tech Stack
- Getting Started
- Configuration
- Running the App
- Testing
- Localization
- Assets
- Contributing
- License
| # | Name |
|---|---|
| 1 | Israa Elhalaby |
| 2 | Abdulrahman Al-Jarhi |
| 3 | Mariam Eqdaih |
| 4 | Kawther Mousa |
| 5 | Aseel Awad |
| 6 | Nouran Almanama |
| Feature | Description |
|---|---|
| Onboarding | Guided onboarding flow to introduce the app and collect user preferences |
| Authentication | Full sign-up, login, and session management |
| Home & Recommendations | Personalised skill recommendations based on user interests |
| Skill Discovery | Browse and search available skills by category |
| Requests | Send, receive, accept, and decline skill-swap requests with status tracking |
| Real-Time Chat | In-app messaging between matched users |
| Video Sessions | Live video calls powered by Agora RTC Engine |
| Post-Session Feedback | Rate and review sessions after completion |
| User Profile | View and edit profile, uploaded avatar, timezone & language settings |
| Gamification | Earn points and badges for completed swaps and community contribution |
| Localization | Full English and Arabic support (LTR & RTL) |
| Responsive UI | Adaptive layouts via ScreenUtil for all screen sizes |
| Onboarding (Learner) | Onboarding (Provider) | Home | Profile |
|---|---|---|---|
![]() |
![]() |
![]() |
![]() |
| My Requests | Chat Room | Session Room |
|---|---|---|
![]() |
![]() |
![]() |
| Platform | Status |
|---|---|
| Android | ✅ Supported |
| iOS | ✅ Supported |
The project follows a feature-first clean architecture with the BLoC / Cubit pattern for state management.
lib/
├── app/ # App entry point, root widget & GoRouter configuration
├── core/ # Shared infrastructure
│ ├── api/ # API client (Dio-based) & endpoint constants
│ ├── constants/ # App-wide constants
│ ├── cubit/ # Global cubits (e.g. locale)
│ ├── extensions/ # Dart extension methods
│ ├── Icons/ # Custom icon data
│ ├── services/ # Local storage & utility services
│ ├── theme/ # App theme & colour tokens
│ ├── utils/ # Helper utilities
│ └── widgets/ # Reusable UI components
├── features/ # Feature modules (see below)
│ ├── Authentication/ # Login, sign-up, auth state
│ ├── chat/ # Real-time messaging
│ ├── home/ # Home screen & recommendations
│ ├── main/ # Bottom navigation shell
│ ├── onboarding/ # First-launch onboarding
│ ├── postSession/ # Post-session feedback & reviews
│ ├── profile/ # User profile & gamification
│ ├── request_flow/ # Step-by-step request creation
│ ├── requests/ # Request listing & management
│ ├── session/ # Video session (Agora)
│ ├── skills/ # Skill browsing & categories
│ └── splash/ # Splash / loading screen
├── gen_l10n/ # Auto-generated localisation delegates
└── l10n/ # ARB translation files (EN, AR)
Each feature module is self-contained with its own:
data/— models, repositories, and servicescubit/— BLoC / Cubit state managementpresentation/— screens and UI widgets
| Layer | Technology |
|---|---|
| Framework | Flutter (Dart ^3.10.7) |
| State Management | flutter_bloc (Cubit) |
| Routing | go_router |
| Networking | dio / http |
| Video Calls | agora_rtc_engine |
| Local Storage | shared_preferences |
| Localisation | Flutter intl + ARB files |
| Responsive UI | flutter_screenutil |
| Image Picker | image_picker |
| SVG Rendering | flutter_svg |
| Typography | google_fonts |
- Flutter SDK ≥ 3.10.7
- Dart SDK ≥ 3.10.7
- Android Studio / Xcode (for emulator or physical device)
- An active internet connection for API calls
# 1. Clone the repository
git clone https://github.com/Israa-e/skill_swap_app.git
cd skill_swap_app
# 2. Install dependencies
flutter pub get
# 3. Generate localisation files
flutter gen-l10n
# 4. Run the app
flutter runThe app uses Agora RTC Engine for live video sessions. To enable this feature:
- Create a free account at Agora.io
- Create a new project and obtain your App ID
- Add your Agora credentials to the appropriate configuration file in the project
Note: The app requires an active API backend. Ensure the API base URL is correctly configured in
lib/core/api/before running.
-
Android (ensure an emulator is running or a device is connected):
flutter run
-
iOS (requires Xcode installed on macOS):
flutter run
# Android APK
flutter build apk --release
# iOS
flutter build ios --release# Run all unit & widget tests
flutter testThe app supports English and Arabic (with full RTL support). Translation files are located in lib/l10n/:
| File | Language |
|---|---|
app_en.arb |
English (template) |
app_ar.arb |
Arabic |
After updating .arb files, regenerate the localisation delegates:
flutter gen-l10nTo add a new locale, create a new app_<locale>.arb file and add the locale code to l10n.yaml.
assets/
├── icons/ # SVG & PNG icons used across the app
└── images/ # Illustrations and image assets
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
This project is licensed under the MIT License — see the LICENSE file for details.






