Scaffold the Flutter app with Italian l10n and region configuration
Creates the app skeleton and the seam everything else in the project hangs off: region-specific data lives in an asset file, not in code, so adding a region later is a new JSON file rather than a refactor. Notable choices: - applicationId and namespace are it.nuvolari.app rather than the doubled it.nuvolari.nuvolari that `flutter create` produces, with the Kotlin package and the iOS bundle identifiers moved to match. - SDK levels are pinned instead of inherited from `flutter.*`. Google Play requires API 36, and that is a release blocker rather than something to let a Flutter upgrade change silently. minSdk 24 is the highest floor the planned dependencies impose. - Riverpod and Dio-free for now, no code generation: see docs/stack-decisions.md. - Italian is the l10n source language, so app_it.arb is the template rather than a translation of an English original. The region parser rejects rather than repairs. An inverted bounding box, a map centre outside its own bounds, an unknown adapter name, a duplicate zone code or an empty attribution list all throw with the offending field named. Each of those would otherwise fail silently and visibly wrong: a swapped latitude and longitude renders the radar in the wrong place, an unknown adapter falling back to mock would show demo frames where live data was expected, and a missing attribution is a licence violation rather than a cosmetic gap. Tests run against the asset that actually ships and against a captured copy of the live ARPA CAP feed, so the eleven zone codes in the config are checked against the eleven the feed really emits rather than against a list retyped from documentation. Verified: dart format clean, flutter analyze 0 issues, 50 tests passing, flutter build appbundle --debug produces an AAB with applicationId it.nuvolari.app, minSdk 24, targetSdk 36. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,71 @@
|
||||
{
|
||||
"id": "piemonte",
|
||||
"displayName": "Piemonte",
|
||||
"timeZone": "Europe/Rome",
|
||||
|
||||
"bbox": [6.55, 43.95, 9.30, 46.55],
|
||||
|
||||
"map": {
|
||||
"center": [7.95, 45.25],
|
||||
"zoom": { "min": 6.0, "max": 13.0, "initial": 7.2 }
|
||||
},
|
||||
|
||||
"sources": {
|
||||
"radar": {
|
||||
"defaultAdapter": "mock",
|
||||
"availableAdapters": ["mock", "dpc"],
|
||||
"product": "VMI",
|
||||
"frameIntervalMinutes": 5
|
||||
},
|
||||
"forecast": {
|
||||
"defaultAdapter": "metno",
|
||||
"availableAdapters": ["metno"]
|
||||
},
|
||||
"alerts": {
|
||||
"defaultAdapter": "arpaCap",
|
||||
"availableAdapters": ["arpaCap"],
|
||||
"officialBulletinUrl": "https://www.arpa.piemonte.it/rischi_naturali/boll/bollettino_allerta.pdf"
|
||||
}
|
||||
},
|
||||
|
||||
"alertZones": [
|
||||
{ "code": "Piem-A", "name": "Toce", "provinces": ["NO", "VB"] },
|
||||
{ "code": "Piem-B", "name": "Val Sesia, Cervo e Chiusella", "provinces": ["BI", "NO", "TO", "VC"] },
|
||||
{ "code": "Piem-C", "name": "Valli Orco, Lanzo, bassa Val Susa e Sangone", "provinces": ["TO"] },
|
||||
{ "code": "Piem-D", "name": "Alta Val Susa, Valli Chisone, Pellice e Po", "provinces": ["CN", "TO"] },
|
||||
{ "code": "Piem-E", "name": "Valli Varaita, Maira e Stura", "provinces": ["CN"] },
|
||||
{ "code": "Piem-F", "name": "Valle Tanaro", "provinces": ["CN"] },
|
||||
{ "code": "Piem-G", "name": "Belbo e Bormida", "provinces": ["AL", "AT", "CN"] },
|
||||
{ "code": "Piem-H", "name": "Scrivia", "provinces": ["AL"] },
|
||||
{ "code": "Piem-I", "name": "Pianura Settentrionale", "provinces": ["AL", "AT", "BI", "NO", "TO", "VC"] },
|
||||
{ "code": "Piem-L", "name": "Pianura Torinese e Colline", "provinces": ["AL", "AT", "CN", "TO"] },
|
||||
{ "code": "Piem-M", "name": "Pianura Cuneese", "provinces": ["CN", "TO"] }
|
||||
],
|
||||
|
||||
"attributions": [
|
||||
{
|
||||
"id": "dpc",
|
||||
"text": "Radar-DPC — Dipartimento della Protezione Civile",
|
||||
"license": "CC BY-SA",
|
||||
"url": "https://radar.protezionecivile.it"
|
||||
},
|
||||
{
|
||||
"id": "metno",
|
||||
"text": "MET Norway",
|
||||
"license": "CC BY 4.0",
|
||||
"url": "https://api.met.no"
|
||||
},
|
||||
{
|
||||
"id": "arpa",
|
||||
"text": "Arpa Piemonte",
|
||||
"license": null,
|
||||
"url": "https://www.arpa.piemonte.it"
|
||||
},
|
||||
{
|
||||
"id": "osm",
|
||||
"text": "© OpenStreetMap contributors",
|
||||
"license": "ODbL",
|
||||
"url": "https://www.openstreetmap.org/copyright"
|
||||
}
|
||||
]
|
||||
}
|
||||
Reference in New Issue
Block a user