From cd82edd8d3dcc400008753e53b441437b754aec1 Mon Sep 17 00:00:00 2001 From: Davide Grilli Date: Fri, 5 Jun 2026 08:55:23 +0200 Subject: [PATCH] chore: bump versione a 2.1.0 e aggiorna CLAUDE.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit versionCode 10300 → 10400. CLAUDE.md aggiornato con i nuovi servizi shared (UpdateService, UrlLauncherService, update_dialog), il MethodChannel in MainActivity.kt e il pattern di mock per widget test. Co-Authored-By: Claude Sonnet 4.6 --- CLAUDE.md | 12 +++++++++--- lib/core/constants/app_constants.dart | 2 +- pubspec.yaml | 2 +- 3 files changed, 11 insertions(+), 5 deletions(-) diff --git a/CLAUDE.md b/CLAUDE.md index 9625bf8..e2f987e 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -43,13 +43,17 @@ bash docker/build/build.sh --release # release → dist/biteplan-re ``` lib/ ├── main.dart -├── app.dart # MaterialApp, NavigationBar, AppBar con bottone info +├── app.dart # MaterialApp, NavigationBar; initState chiama UpdateService.checkUpdate() e mostra showUpdateDialog() se c'è aggiornamento ├── core/ │ ├── constants/app_constants.dart # kDayIds, kMealSlots, kStorageKey*, kAppVersion │ └── theme/app_theme.dart ├── shared/ -│ ├── services/storage_service.dart # wrapper SharedPreferences (load/save) +│ ├── services/ +│ │ ├── storage_service.dart # wrapper SharedPreferences (load/save) +│ │ ├── update_service.dart # checkUpdate() → GitHub API, isNewer(), parseTagName() (@visibleForTesting) +│ │ └── url_launcher_service.dart # MethodChannel 'com.davide.biteplan/launcher' → Intent.ACTION_VIEW │ └── widgets/ +│ └── update_dialog.dart # showUpdateDialog() — AlertDialog con "Più tardi" / "Scarica" ├── features/ │ ├── meal_planner/ │ │ ├── models/meal_plan.dart # MealPlan, DayPlan @@ -80,7 +84,9 @@ lib/ **Persistenza**: `shared_preferences`, chiavi `meals` e `shopping_list` (JSON serializzato). **Conversione**: logica in `ConversionEntry` — `rawToCooked = raw * yieldFactor`, `cookedToRaw = cooked / yieldFactor`. **UI**: Material 3, seed color `Color(0xFF2d6a4f)`, tutto in italiano. -**QR**: payload JSON `{ "v": 1, "meals": { ... } }`, limite 2953 byte (capacità QR con error correction L). +**QR**: payload JSON `{ "v": 1, "meals": { ... } }`, limite 2953 byte (capacità QR con error correction L). +**Update checker**: `UpdateService.checkUpdate()` usa `dart:io` `HttpClient` (nessun package aggiuntivo); disabilitato su web (`kIsWeb`). Il `MethodChannel` `com.davide.biteplan/launcher` è implementato in `android/app/src/main/kotlin/com/davide/biteplan/MainActivity.kt`. +**Widget test con MethodChannel**: usare `TestDefaultBinaryMessengerBinding.instance.defaultBinaryMessenger.setMockMethodCallHandler` per mockare il canale nei test — vedi `test/shared/widgets/update_dialog_test.dart`. ## Testing diff --git a/lib/core/constants/app_constants.dart b/lib/core/constants/app_constants.dart index ccc55d2..62b04d0 100644 --- a/lib/core/constants/app_constants.dart +++ b/lib/core/constants/app_constants.dart @@ -1,4 +1,4 @@ -const String kAppVersion = '2.0.0'; +const String kAppVersion = '2.1.0'; const String kAppAuthor = 'Davide Grilli'; const String kAppLicense = 'EUPL v1.2'; diff --git a/pubspec.yaml b/pubspec.yaml index 72970ed..4e98472 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,7 +1,7 @@ name: biteplan description: App per meal planning, conversione crudo/cotto e lista della spesa. publish_to: 'none' -version: 2.0.0+10300 +version: 2.1.0+10400 environment: sdk: '>=3.3.0 <4.0.0'