A Flutter-based mobile application that empowers citizens to report and track urban infrastructure issues in their communities. SnapNFix enables users to photograph problems like potholes, damaged manholes, garbage accumulation, and other urban concerns, submit reports with location data, and track resolution progress.
- Photo-based Issue Reporting: Capture infrastructure problems with automatic location tagging
- Real-time Issue Tracking: Monitor report status and resolution progress
- Interactive Map Visualization: View nearby issues and their current status
- Area-based Subscriptions: Receive updates for specific geographical areas
- Offline Support: Submit reports without internet connection with automatic synchronization
- Multi-language Support: Available in Arabic and English
- User Authentication: Secure user profiles and report management
- Intelligent Report Categorization: Issues classified by category and severity levels
- Community Engagement: Track community reports and area health statistics
- Push Notifications: Real-time updates via Firebase Cloud Messaging
- Device Preview Support: Development tools for testing across multiple screen sizes
- Flutter (^3.7.0) - Cross-platform mobile development
- Dart (^3.7.0) - Programming language
- flutter_bloc (^9.1.0) - State management with BLoC pattern
- hydrated_bloc (^10.0.0) - Persistent state management
- get_it (^8.0.3) - Dependency injection
- injectable (^2.5.0) - Code generation for dependency injection
- Firebase Core (^3.12.1) - Backend infrastructure
- Firebase Messaging (^15.2.7) - Push notifications
- Sentry Flutter - Crash reporting and error monitoring
- build_runner (^2.4.15) - Code generation
- injectable_generator (^2.6.2) - Dependency injection generation
- retrofit (^4.4.2) - HTTP client generation
- freezed (^2.4.5) - Data class generation
- Flutter SDK: Version 3.7.0 or higher
- Dart SDK: Version 3.7.0 or higher
- Firebase CLI: Latest version for backend configuration
- Android SDK: API level 34+ for Android development
- Java/Kotlin: JDK 17, Kotlin 11 for Android compilation
git clone https://github.com/AbdelrhmanReda17/SnapNFix-Mobile.git
cd SnapNFix-Mobile flutter pub get flutter gen-l10n
flutter pub run build_runner build --delete-conflicting-outputs The application uses Firebase for backend services. Configuration files are included:
firebase.json- Project configurationandroid/app/google-services.json- Android Firebase settingslib/firebase_options.dart- Platform-specific options
lib/
βββ core/ # Core utilities and services
β βββ infrastructure/ # Location, messaging, networking services
β βββ dependency_injection/ # GetIt configuration
β βββ config/ # App configurations
βββ modules/ # Feature modules
β βββ authentication/ # User authentication
β βββ reports/ # Issue reporting system
β βββ issues/ # Issue management
β βββ area_updates/ # Area subscription system
βββ presentation/ # UI components and screens
β βββ screens/ # Application screens
β βββ navigation/ # Routing configuration
βββ l10n/ # Localization files
βββ main_production.dart # Production entry point
Includes DevicePreview for testing multiple screen sizes:
flutter run --flavor development --target lib/main_development.dart Includes Sentry crash reporting:
flutter run --flavor production --target lib/main_production.dart The core reporting functionality supports both online and offline operations with automatic synchronization. Users can submit detailed reports with photos and location data, with fallback to local storage when offline.
Automatic location capture and address resolution for precise issue reporting.
Intelligent offline/online detection with automatic synchronization of pending reports when connectivity is restored.
The application supports multiple build flavors:
- Development:
applicationIdSuffix: '', includes debugging tools - Production: Standard build with crash reporting.
Automated build and distribution using:
- GitHub Actions: Windows-based runners with Flutter 3.29.0
- Fastlane: Automated dependency installation and Firebase App Distribution
- Firebase App Distribution: Automatic deployment to testers.
- Fork the repository
- Create a feature branch (
git checkout -b feature/xx-feature) - Commit your changes (
git commit -m 'Add some xx feature') - Push to the branch (
git push origin feature/xx-feature) - Open a Pull Request
- Run code generation after modifying models:
flutter pub run build_runner build - Update localizations:
flutter gen-l10n - Follow clean architecture principles and maintain module separation
This project is licensed under the MIT License - see the LICENSE file for details.