5.1 KiB
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_mapPolylineLayer - 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.0dependency - 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)
_showRoutestate not triggering rebuild- Decoded points might be malformed
- OSRM returns encoded polyline, decoding might fail silently
Debug steps:
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
- Missing commas — Several Dart function calls missing commas between arguments (fixed in multiple places)
- Fallback logic — If OSRM fails, falls back to straight lines between stops (not following streets)
- No error UI — Route/optimization failures fail silently (only debugPrint)
- State management —
_isLoadingRouteand_showRoutemight have race conditions
Dependencies Added
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 referenceassets/hoogerheide_addresses.json— 5,855 addresses from Overpasslib/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)
-
Fix route display:
- Check
adb logcatfor debug prints - Verify PolylineLayer renders (try hardcoded points)
- Test with 2-3 stops only
- Check
-
Improve error handling:
- Show SnackBar on route/optimization failure
- Add retry button
-
Local Nominatim (optional):
- Install PostgreSQL + Nominatim with Netherlands data
- Solves rate-limiting issues permanently
-
Unit tests:
- Test polyline decoding
- Test geocoding logic
- Test route optimization
📦 Build Commands
# 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