Skip to content

Al-Saihan/LandmarkGO

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

26 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🗺️ LandmarkGO

A cross-platform Flutter app for managing geolocated landmarks with a beautiful, theme-aware UI

Flutter Dart Platform License

📺 Watch Demo🚀 Getting Started📸 Screenshots


📖 Overview

LandmarkGO lets you create, view, edit, and delete geolocated landmarks with ease. Browse your collection on an interactive OpenStreetMap, manage entries from a sleek records list, and enjoy a polished experience with full light/dark theme support.

✨ Highlights

Feature Description
🗺️ Interactive Map OpenStreetMap integration with large, theme-colored markers
🌗 Theme Toggle Seamless light/dark mode across the entire app
📍 GPS Autofill Automatically populate coordinates when adding landmarks
📷 Image Support Attach photos with automatic JPEG compression
✏️ Quick Actions Swipe gestures and bottom sheets for fast editing

🎯 Features

Navigation & UI

  • Bottom Navigation — Switch between Overview, Records, and New Entry tabs
  • Theme Toggle — Global light/dark theme with reactive color updates
  • Responsive Design — Clean, intuitive interface across devices

Map Overview

  • Interactive OpenStreetMap with flutter_osm_plugin
  • Large, theme-colored markers for visibility
  • Tap markers to reveal a bottom sheet with image preview, coordinates, and quick actions
  • Smooth panning and zooming

Records Management

  • Swipeable list cards with Edit/Delete actions
  • Image previews with loading and error states
  • Inline quick-edit dialog for title and coordinates
  • Delete confirmation to prevent accidents

Add & Edit Entries

  • Add Mode: Pick an image, auto-resize to JPEG, multipart upload
  • GPS Autofill: Automatically populates latitude/longitude
  • Edit Mode: Update title and coordinates (image locked by design)
  • Form validation for required fields

Backend Integration

  • Full CRUD operations via REST API
  • Robust JSON parsing (handles strings/numbers flexibly)
  • Graceful null handling for missing images

🚀 Getting Started

Prerequisites

Requirement Version
Flutter SDK 3.9.2+
Dart 3.0+
Android Studio / Xcode Latest
Internet Connection Required for maps & API

Installation

  1. Clone the repository

    git clone https://github.com/your-username/LandmarkGO.git
    cd LandmarkGO
  2. Install dependencies

    flutter pub get
  3. Run the app

    flutter run

Platform Permissions

📱 Android

Permissions are pre-configured in android/app/src/main/AndroidManifest.xml:

  • android.permission.INTERNET
  • android.permission.ACCESS_COARSE_LOCATION
  • android.permission.ACCESS_FINE_LOCATION
🍎 iOS

Location usage descriptions are set in ios/Runner/Info.plist:

  • NSLocationWhenInUseUsageDescription
  • NSLocationAlwaysAndWhenInUseUsageDescription

📁 Project Structure

lib/
├── main.dart                 # App entry point & navigation
├── includes/
│   ├── app_bar.dart          # Custom app bar with theme toggle
│   ├── globals.dart          # Theme definitions & global state
│   └── nav_bar.dart          # Bottom navigation component
├── models/
│   └── landmark.dart         # Landmark data model
├── pages/
│   ├── overview.dart         # Map overview page
│   ├── records.dart          # Records list page
│   └── new_entry.dart        # Add/Edit entry form
└── services/
    └── api_service.dart      # REST API client

📸 Screenshots

Add & Edit Entries

Add Entry Edit Entry
Add Entry Edit Entry
Create landmarks with GPS autofill Update title & coordinates

Map Overview

Map View Marker Details
Overview Map Marker Bottom Sheet
Interactive OpenStreetMap Bottom sheet with quick actions

Theme Support

Dark Mode Light Mode
Records Page Dark Records Page Light
Easy on the eyes Clean and bright

⚠️ Known Limitations

Issue Description
🖼️ Image Lock in Edit By design, editing only updates title/coordinates — image remains unchanged
📍 Marker Collision Landmarks with nearly identical coordinates may overlap
📊 No Pagination All records are fetched at once; large datasets may affect performance
🌐 Online Only Map tiles and API require an active internet connection
🔄 Refresh Delay Map markers may occasionally require manual refresh after deletion

🛠️ Tech Stack


📄 License

This project is proprietary. All rights reserved.


Made with ❤️ and Flutter