delivery_app/CHANGELOG.md

157 lines
5.1 KiB
Markdown

# Delivery App — Build & Feature Changelog
**Date:** 2026-04-29
**Developer:** Raphael (Emergency: kimi-k2.6)
**Target:** Wesley vdk (Telegram)
---
## ✅ Completed Features
### 1. Map Themes (Fixed)
- **Standard** — OpenStreetMap default tiles
- **Dark** — CartoDB Dark Matter (replaced Stadia Dark which returned 401 Unauthorized)
- **CartoDB Voyager** — Light themed, good contrast with app UI
*Note: Stadia Dark requires API key. CartoDB Dark Matter is free.*
### 2. Overpass Address Integration
- Fetched **5,855 addresses** (151 streets) in Hoogerheide via Overpass API
- Stored locally in `assets/hoogerheide_addresses.json`
- App now checks local cache first (instant), falls back to Nominatim with timeout
- Added "Refresh coordinates" button in RoutePage AppBar
### 3. Delete Functionality
- **Delete stops:** Via stop details bottom sheet (red button)
- **Delete routes:** Trash icon next to each route in RoutesPage
- Both require confirmation dialog
### 4. Route Optimization & Display
- **OSRM trip routing** for proper TSP (Traveling Salesman Problem) optimization
- **Route polyline display** using `flutter_map` PolylineLayer
- **Loading indicators** when calculating routes
- Route button (↗️) toggles display on/off
### 5. Build Environment Setup
- Installed **Eclipse Temurin JDK 17** (`/workspace/jdk/`)
- Installed **Android SDK** (`/workspace/android-sdk/`)
- Installed **CMake 3.22.1** via Android SDK manager
- Fixed missing `source_span: ^1.10.0` dependency
- APK output: **49MB** (consistent across builds)
---
## ❌ Known Issues / Unresolved
### 1. Route Line Not Displaying
**Status:** Unresolved
**Symptoms:**
- Tapping route button shows loading indicator
- After completion, no polyline appears on map
- OSRM API returns valid geometry (tested manually)
- Polyline decoding appears correct (debug prints added)
**Likely causes:**
- PolylineLayer z-index issue (might be behind tiles)
- `_showRoute` state not triggering rebuild
- Decoded points might be malformed
- OSRM returns encoded polyline, decoding might fail silently
**Debug steps:**
```bash
adb logcat | grep flutter # View debug prints from phone
```
### 2. Stadia Dark Theme Unusable
**Status:** Replaced with CartoDB Dark
**Root cause:** `tiles.stadiamaps.com` returns 401 Unauthorized
**Solution:** Use CartoDB Dark Matter (free, no auth) or get Stadia API key
### 3. Coordinate Accuracy
**Status:** Improved, not perfect
**Issue:** Some stops still map to incorrect locations
**Cause:** Database has old/wrong coordinates from previous Nominatim failures
**Fix:** Use "Refresh coordinates" button to re-geocode all stops using Overpass data
### 4. APK Caching on Telegram
**Status:** Partially fixed
**Issue:** Telegram caches APK files, installing old versions
**Workaround:** Rename APK with timestamp before sending (e.g., `delivery-v20260429-2126-debug.apk`)
---
## 🔧 Technical Debt
### Code Issues
1. **Missing commas** — Several Dart function calls missing commas between arguments (fixed in multiple places)
2. **Fallback logic** — If OSRM fails, falls back to straight lines between stops (not following streets)
3. **No error UI** — Route/optimization failures fail silently (only debugPrint)
4. **State management**`_isLoadingRoute` and `_showRoute` might have race conditions
### Dependencies Added
```yaml
dependencies:
source_span: ^1.10.0 # Fix for string_scanner incompatibility
```
### Files Modified
- `lib/main.dart` — Main app logic (routes, stops, map, geocoding)
- `pubspec.yaml` — Added assets reference
- `assets/hoogerheide_addresses.json` — 5,855 addresses from Overpass
- `lib/hoogerheide_streets.dart` — Generated street coordinates (unused now)
---
## 📋 Test Checklist
- [ ] Route line displays after tapping ↗️ button
- [ ] Loading indicator shows during route calculation
- [ ] Route optimization reorders stops correctly
- [ ] Delete stop works with confirmation
- [ ] Delete route works with confirmation
- [ ] Dark theme (CartoDB) renders correctly
- [ ] "Refresh coordinates" updates stop positions
- [ ] Overpass data loads (no network needed after first fetch)
---
## 🚀 Next Steps (If Resuming)
1. **Fix route display:**
- Check `adb logcat` for debug prints
- Verify PolylineLayer renders (try hardcoded points)
- Test with 2-3 stops only
2. **Improve error handling:**
- Show SnackBar on route/optimization failure
- Add retry button
3. **Local Nominatim (optional):**
- Install PostgreSQL + Nominatim with Netherlands data
- Solves rate-limiting issues permanently
4. **Unit tests:**
- Test polyline decoding
- Test geocoding logic
- Test route optimization
---
## 📦 Build Commands
```bash
# Clean build
flutter clean && flutter pub get
# Release APK
export JAVA_HOME="/home/node/.openclaw/workspace/jdk/jdk-17.0.9+9"
export ANDROID_HOME="/home/node/.openclaw/workspace/android-sdk"
export PATH="$JAVA_HOME/bin:$ANDROID_HOME/cmdline-tools/latest/bin:$ANDROID_HOME/platform-tools:/home/node/.openclaw/workspace/flutter/bin:$PATH"
flutter build apk --release
# Output: build/app/outputs/flutter-apk/app-release.apk (49MB)
```
---
**Last updated:** 2026-04-29 23:15 UTC