How I built Ihuriro, a community safety reporting app with Flutter, covering architecture decisions, state management, and real-time features.
Why Flutter?
For Ihuriro, a community safety reporting app, I needed to ship on both Android and iOS quickly. Flutter's single codebase approach and excellent location/maps support made it the ideal choice.
App Architecture
I used a clean architecture approach with three layers:
- Presentation - Flutter widgets with Provider for state management
- Domain - Business logic and use cases
- Data - Repository pattern with Firebase and REST API
Key Features Implementation
Location-Based Reporting
The app captures the user's GPS coordinates when submitting a report, displaying the incident location on Google Maps for authorities.
Real-Time Notifications
Firebase Cloud Messaging pushes status updates to users when their reports are being processed or resolved.
Offline Support
Reports can be drafted offline using local storage (Hive database) and automatically sync when connectivity returns.
Lessons Learned
Flutter's hot reload dramatically speeds up UI development. However, platform-specific features like background location tracking still require native code via platform channels.