feat: riscrivi app in Flutter

Riscrittura completa da Vue 3 + Capacitor a Flutter/Dart.

Architettura feature-based (lib/features/):
- meal_planner: modello MealPlan/DayPlan, provider, pagina e widget
- converter: modello ConversionEntry, provider con ricerca, pagina
- shopping_list: modello ShoppingItem, provider con deduplicazione, pagina e widget

Core:
- Material 3 con seed color #2d6a4f
- NavigationBar + IndexedStack (preserva stato dei tab)
- Portrait lock via SystemChrome
- Persistenza con shared_preferences
- 50+ alimenti × metodi cottura in assets/data/conversions.json

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-05-16 17:41:26 +02:00
parent d49b31f21d
commit eb7912421c
20 changed files with 1656 additions and 0 deletions
+30
View File
@@ -0,0 +1,30 @@
const List<String> kDayIds = [
'lunedi',
'martedi',
'mercoledi',
'giovedi',
'venerdi',
'sabato',
'domenica',
];
const Map<String, String> kDayLabels = {
'lunedi': 'Lunedì',
'martedi': 'Martedì',
'mercoledi': 'Mercoledì',
'giovedi': 'Giovedì',
'venerdi': 'Venerdì',
'sabato': 'Sabato',
'domenica': 'Domenica',
};
const List<String> kMealSlots = ['colazione', 'pranzo', 'cena'];
const Map<String, String> kMealSlotLabels = {
'colazione': 'Colazione',
'pranzo': 'Pranzo',
'cena': 'Cena',
};
const String kStorageKeyMeals = 'meals';
const String kStorageKeyShopping = 'shopping_list';
+24
View File
@@ -0,0 +1,24 @@
import 'package:flutter/material.dart';
class AppTheme {
static const _seed = Color(0xFF2d6a4f);
static ThemeData light() {
final scheme = ColorScheme.fromSeed(seedColor: _seed);
return ThemeData(
useMaterial3: true,
colorScheme: scheme,
cardTheme: CardThemeData(
elevation: 0,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(12),
side: BorderSide(color: scheme.outlineVariant),
),
),
inputDecorationTheme: InputDecorationTheme(
border: OutlineInputBorder(borderRadius: BorderRadius.circular(10)),
contentPadding: const EdgeInsets.symmetric(horizontal: 14, vertical: 12),
),
);
}
}