Frontend Cross-Platform Application for POIFinder Server made with flutter.
- Dart 73.4%
- C++ 13.3%
- CMake 10.4%
- Swift 1.3%
- C 0.8%
- Other 0.7%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
| android | ||
| assets | ||
| ios | ||
| lib | ||
| linux | ||
| macos | ||
| web | ||
| windows | ||
| .gitignore | ||
| .metadata | ||
| analysis_options.yaml | ||
| architecture.md | ||
| CLAUDE.md | ||
| devtools_options.yaml | ||
| LICENSE | ||
| pubspec.lock | ||
| pubspec.yaml | ||
| README.md | ||
| THIRD_PARTY_LICENSES.md | ||
POIFinder
App Flutter (Android-first) per la scoperta di Point of Interest (POI) su mappa, basata su MapLibre GL e su un sistema di plugin JSON remoti che permette di aggiungere nuove sorgenti di dati senza modificare il codice dell'app.
Cosa fa
- Mostra una mappa (MapLibre) con diversi provider selezionabili (OpenStreetMap, Protomaps, MapTiler, Mapbox, Stamen, o uno stile custom via URL).
- Centra la mappa sulla posizione GPS dell'utente (con cache del fix recente per evitare richieste ripetute).
- Esegue una ricerca "radar": interroga tutti i plugin installati e abilitati, chiedendo i POI presenti intorno al centro mappa (entro un raggio configurabile), e li disegna come marker sulla mappa.
- Toccando un marker si apre una scheda con gli attributi del POI (etichettati secondo lo schema dichiarato dal plugin), da cui è possibile salvarlo/rimuoverlo dai Bookmarks.
- I "plugin" sono manifest JSON remoti che descrivono: un endpoint HTTP da interrogare, i parametri di configurazione esposti all'utente (testo, numero, select, switch), gli asset grafici (icona, marker) e lo schema di visualizzazione degli attributi restituiti dal loro endpoint.
- I plugin si installano da URL, sono verificabili per aggiornamenti (confronto versione) e aggiornabili preservando le impostazioni già configurate dall'utente.
- Le impostazioni dell'app (lingua, provider mappa, token, raggio di ricerca, ecc.) sono persistite localmente.
Struttura a 3 schermate
L'app è organizzata attorno a un menu inferiore (ConvexBottomBar) con 3 tab:
- POIs — griglia stile "metro" con i plugin installati, più due voci statiche: + Add plugin (installazione da URL) e Bookmarks (elenco POI salvati). Toccando un plugin si apre la pagina di dettaglio/configurazione.
- Map (tab di default) — la mappa con overlay (mirino centrale, pulsante GPS, pulsante radar) e i marker dei POI trovati.
- Settings — lingua, provider mappa, token API, URL custom, raggio di ricerca.
Funzionalità principali (dettaglio)
| Area | Descrizione |
|---|---|
| Mappa & GPS | Rendering MapLibre, marker GPS con cache 2 minuti, centraggio camera. |
| Radar | Interroga in parallelo gli endpoint di tutti i plugin abilitati, passando lat/lon/raggio + parametri configurati dall'utente. |
| Rendering POI | Ogni plugin ha un'icona marker dedicata registrata sulla mappa; i marker portano con sé i dati del POI per la visualizzazione a tap. |
| Sistema plugin | Installazione da URL o da QR code, rimozione, enable/disable, configurazione parametri, versioning/update, caching asset locale. |
| Elenco POI per plugin | Toccando un plugin nella pagina POIs si apre l'elenco (ordinabile per nome o distanza) dei POI trovati nell'ultima scansione radar; le impostazioni del plugin restano raggiungibili dall'icona ingranaggio in alto a destra. |
| Bookmarks | Salvataggio permanente di singoli POI con alias personalizzabile; rimozione sempre soggetta a conferma; apertura delle coordinate in un'app di mappe/navigazione esterna. |
| Impostazioni | Persistenza locale (SharedPreferences) di tutte le preferenze utente. |
| Localizzazione | Sistema di traduzione custom (EN/IT), nessuna dipendenza da intl. |
Stack tecnico
Flutter · maplibre_gl · convex_bottom_bar · http · geolocator · path_provider · shared_preferences · url_launcher · mobile_scanner.
Nessun state management avanzato (no Provider/Riverpod): stato locale nei widget + qualche classe statica/singleton per stato condiviso minimo.
Stato di sviluppo
Tutte le funzionalità pianificate nella prima fase sono implementate:
- ✅ Mappa, GPS, Radar
- ✅ Sistema plugin (install/remove/enable/versioning)
- ✅ UI dettaglio plugin + configurazione parametri
- ✅ Integrazione plugin → richieste di rete
- ✅ Rendering dinamico dei POI sulla mappa
- ✅ Bookmarks
Per i dettagli tecnici file-per-file, vedi architecture.md.