Discover, explore, and book premium properties with a polished mobile experience.
HAVEN is a premium real estate mobile app built with Flutter, designed as a high-fidelity portfolio showcase. The app enables users to discover properties through an interactive map, browse detailed listings, connect with agents, book viewing appointments, and manage their saved favourites — all with a refined dark/light theme and smooth animations throughout.
The project demonstrates professional mobile engineering practices: strict clean architecture with three isolated layers (data, domain, presentation), BLoC/Cubit state management with sealed state classes, a cache-first data strategy using Hive, and a repository pattern that lets the mock datasource be swapped for a real API by changing a single line in the dependency injection file.
Built for iOS and Android from a single codebase, HAVEN targets iPhone 14 Pro form factor (390×844pt) with support for both portrait orientation and system-level dark/light mode toggling.
| Home — Map (Dark) | Home — Map (Light) | Home — Nearby (Dark) |
|---|---|---|
![]() |
![]() |
![]() |
| Home — Nearby (Light) | Find Property | Listing |
|---|---|---|
![]() |
![]() |
![]() |
| Saved — Grid | Saved — List | Profile |
|---|---|---|
![]() |
![]() |
![]() |
| Agent Profile | Property Detail | Notifications |
|---|---|---|
![]() |
![]() |
![]() |
- Interactive map view with animated property pins and gold price bubbles
- Category filtering: Buy / Rent / Commercial with spring-physics tab transitions
- Advanced search with price range slider, bedroom count, property type chips, and sort order
- Full property listing with skeleton shimmer loading states
- Rich property detail screen with swipeable image gallery (drag-velocity gesture), amenities grid, and location mini-map
- Agent profile with client reviews, star ratings, and active listings grid
- 3-step viewing appointment flow: date picker → time slot grid → confirm → animated success screen
- Save and manage favourite properties — grid view with full-width listing-style cards, or swipe-to-remove list view
- Dark and light mode with instant toggle, persisted across sessions via SharedPreferences
- Push notification centre with grouped TODAY / EARLIER sections, unread indicators, and mark-all-read
- Clean Architecture — data / domain / presentation layers with enforced boundaries
- BLoC / Cubit state management with sealed state classes and Equatable comparison
- Cache-first data strategy: serve from Hive instantly, refresh in background; write-through for mutations
- Repository pattern — mock datasource is the only thing that changes when connecting a real API
- Dependency injection via GetIt with factory-per-route cubits and singleton ThemeCubit
- Type-safe navigation with go_router, ShellRoute for nav-bar screens,
extrafor object passing
┌─────────────────────────────────────────────────┐
│ Presentation Layer │
│ Screens ←→ Cubits ←→ States │
└──────────────────────┬──────────────────────────┘
│ Use Cases only
┌──────────────────────▼──────────────────────────┐
│ Domain Layer │
│ Entities │ Repository Interface │
│ │ Use Cases │
└──────────────────────┬──────────────────────────┘
│ Implements interface
┌──────────────────────▼──────────────────────────┐
│ Data Layer │
│ Mock Remote ──▶ Repository Impl ◀── Hive │
│ (swap for real API, zero other changes) │
└─────────────────────────────────────────────────┘
lib/
├── core/ — Theme tokens, router, DI, error handling, Result<T>
├── data/ — Mock datasource, Hive cache, repository implementation
│ ├── mock/ — Raw JSON-style mock lists (properties, notifications)
│ ├── datasources/— Remote + local abstract interfaces and implementations
│ ├── models/ — Entity subclasses with fromJson/toJson serialization
│ └── repositories/— PropertyRepositoryImpl (cache-first orchestration)
├── domain/ — Pure Dart: entities, repository interface, 6 use cases
├── presentation/ — Screens, Cubits, States (10 feature cubits + ThemeCubit)
└── shared/ — PropertyCard, SkeletonCard, GoldButton, HavenBackButton, etc.
| Layer | Technology |
|---|---|
| UI Framework | Flutter 3.x |
| Language | Dart 3.x |
| State Management | flutter_bloc 9.x (BLoC / Cubit pattern) |
| Navigation | go_router 14.x (ShellRoute, typed extras) |
| Local Cache | hive_flutter 1.x |
| Dependency Injection | get_it 8.x |
| Animations | flutter_animate 4.x |
| Fonts | Google Fonts — Playfair Display · Inter · Space Mono |
| Linting | flutter_lints (zero warnings target) |
# Prerequisites: Flutter 3.x SDK, Dart 3.x
git clone https://github.com/ayanasamuel8/heaven.git
cd heaven
flutter pub get
flutter runNo API keys, environment variables, or backend setup required — the app runs entirely on mock data with local Hive caching. All 5 properties and 5 notifications are defined in lib/data/mock/.
To run on a specific device:
flutter devices # list connected devices / emulators
flutter run -d <device> # target a specific deviceThe UI was designed as a high-fidelity interactive HTML prototype before implementation began. You can view the full design in any browser:
docs/Real_Estate_App_dc__2_.html
The design file covers all 10 screens with exact color values, spacing, typography, and interaction notes. The implementation in lib/ matches the design 1:1 using Flutter's ThemeExtension system and the token constants in lib/core/theme/.
| Path | Purpose |
|---|---|
lib/core/theme/ |
AppColors, HavenColors ThemeExtension, AppDimensions, AppTextStyles, AppTheme |
lib/core/di/injection.dart |
All GetIt registrations — single source of truth for wiring |
lib/core/router/app_router.dart |
go_router config, ShellRoute, BlocProvider at route level |
lib/data/mock/ |
Raw List<Map<String, dynamic>> — never imported outside data layer |
lib/domain/entities/ |
Pure Dart classes, zero Flutter imports |
lib/domain/usecases/ |
Single-method call() classes wrapping repository calls |
lib/presentation/bloc/ |
One Cubit per feature, sealed state classes, factory-registered |
lib/presentation/screens/ |
10 screens + sub-widgets, zero business logic |
lib/shared/widgets/ |
PropertyCard, SkeletonCard, GoldButton, TagBadge, HavenBackButton |
docs/ |
PRD, ARCHITECTURE.md, design reference HTML, screenshots |
MIT License — see LICENSE











