An app showcasing african countries and details about them
# Afrisight
Afrisight is a cross-platform Flutter application that lets users explore, search, and learn about African countries, manage favorites, and personalize their experience with profile and notification features.
## Features
- **Explore African Countries:** Browse, search, and filter all African countries with details like capital, population, area, borders, currencies, languages, region, subregion, and timezones.
- **Favorites:** Mark countries as favorites for quick access.
- **Profile Management:** Edit your profile, upload a profile image, and manage preferences (dark mode, notifications).
- **Onboarding & Authentication:** Guided onboarding for new users, sign up/sign in with validation and local persistence.
- **Notifications:** Receive and view app notifications.
- **Robust Error Handling:** Handles API/network errors gracefully.
- **Caching:** Reduces redundant API calls for better performance.
- **Unit Tests:** Ensures stability and correctness of core logic.
## Project Structure
```
afrisight/
├── lib/
│ ├── app/
│ │ ├── bindings/ # Dependency injection setup (app_bindings.dart)
│ │ ├── controllers/ # State management (country_controller.dart, profile_controller.dart, etc.)
│ │ ├── models/ # Data models (country.dart, user.dart)
│ │ ├── routes/ # App routing (app_pages.dart, app_routes.dart)
│ │ ├── screens/ # UI screens (home_screen.dart, country_details_screen.dart, etc.)
│ │ ├── services/ # API, cache, notification services (api_service.dart, cache_service.dart, notification_service.dart)
│ │ ├── themes/ # Light/dark theme (app_theme.dart)
│ │ ├── widgets/ # Reusable widgets (custom_search_bar.dart, loading_widget.dart)
│ ├── main.dart # App entry point (main.dart)
├── test/ # Unit and widget tests (widget_test.dart)
├── assets/ # Images and icons
├── andr …