feat: unified food calendar — extend home screen to future dates + planned meals
Phase 1: date strip now covers today + 7 future days; right chevron enabled; future pills rendered in lighter style. Phase 2: home screen shows DateContext (past/today/future): - future dates: hide calorie ring + macros, show PlanningBanner - plannedMealsProvider derives from cached menuProvider (no extra API call) - _MealCard shows ghost PlannedSlotTile for unconfirmed menu slots - "Mark as eaten" creates a diary entry (source: menu_plan) via existing API New l10n keys (12 locales): planningForDate, markAsEaten, plannedMealLabel Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -123,5 +123,13 @@
|
||||
},
|
||||
"servingsLabel": "حصص",
|
||||
"addToDiary": "إضافة إلى اليومية",
|
||||
"scanDishPhoto": "مسح الصورة"
|
||||
"scanDishPhoto": "مسح الصورة",
|
||||
"planningForDate": "",
|
||||
"@planningForDate": {
|
||||
"placeholders": {
|
||||
"date": { "type": "String" }
|
||||
}
|
||||
},
|
||||
"markAsEaten": "",
|
||||
"plannedMealLabel": ""
|
||||
}
|
||||
|
||||
@@ -123,5 +123,13 @@
|
||||
},
|
||||
"servingsLabel": "Portionen",
|
||||
"addToDiary": "Zum Tagebuch hinzufügen",
|
||||
"scanDishPhoto": "Foto scannen"
|
||||
"scanDishPhoto": "Foto scannen",
|
||||
"planningForDate": "",
|
||||
"@planningForDate": {
|
||||
"placeholders": {
|
||||
"date": { "type": "String" }
|
||||
}
|
||||
},
|
||||
"markAsEaten": "",
|
||||
"plannedMealLabel": ""
|
||||
}
|
||||
|
||||
@@ -121,5 +121,13 @@
|
||||
},
|
||||
"servingsLabel": "Servings",
|
||||
"addToDiary": "Add to diary",
|
||||
"scanDishPhoto": "Scan photo"
|
||||
"scanDishPhoto": "Scan photo",
|
||||
"planningForDate": "Planning for {date}",
|
||||
"@planningForDate": {
|
||||
"placeholders": {
|
||||
"date": { "type": "String" }
|
||||
}
|
||||
},
|
||||
"markAsEaten": "Mark as eaten",
|
||||
"plannedMealLabel": "Planned"
|
||||
}
|
||||
|
||||
@@ -123,5 +123,13 @@
|
||||
},
|
||||
"servingsLabel": "Porciones",
|
||||
"addToDiary": "Añadir al diario",
|
||||
"scanDishPhoto": "Escanear foto"
|
||||
"scanDishPhoto": "Escanear foto",
|
||||
"planningForDate": "",
|
||||
"@planningForDate": {
|
||||
"placeholders": {
|
||||
"date": { "type": "String" }
|
||||
}
|
||||
},
|
||||
"markAsEaten": "",
|
||||
"plannedMealLabel": ""
|
||||
}
|
||||
|
||||
@@ -123,5 +123,13 @@
|
||||
},
|
||||
"servingsLabel": "Portions",
|
||||
"addToDiary": "Ajouter au journal",
|
||||
"scanDishPhoto": "Scanner une photo"
|
||||
"scanDishPhoto": "Scanner une photo",
|
||||
"planningForDate": "",
|
||||
"@planningForDate": {
|
||||
"placeholders": {
|
||||
"date": { "type": "String" }
|
||||
}
|
||||
},
|
||||
"markAsEaten": "",
|
||||
"plannedMealLabel": ""
|
||||
}
|
||||
|
||||
@@ -123,5 +123,13 @@
|
||||
},
|
||||
"servingsLabel": "सर्विंग",
|
||||
"addToDiary": "डायरी में जोड़ें",
|
||||
"scanDishPhoto": "फ़ोटो स्कैन करें"
|
||||
"scanDishPhoto": "फ़ोटो स्कैन करें",
|
||||
"planningForDate": "",
|
||||
"@planningForDate": {
|
||||
"placeholders": {
|
||||
"date": { "type": "String" }
|
||||
}
|
||||
},
|
||||
"markAsEaten": "",
|
||||
"plannedMealLabel": ""
|
||||
}
|
||||
|
||||
@@ -123,5 +123,13 @@
|
||||
},
|
||||
"servingsLabel": "Porzioni",
|
||||
"addToDiary": "Aggiungi al diario",
|
||||
"scanDishPhoto": "Scansiona foto"
|
||||
"scanDishPhoto": "Scansiona foto",
|
||||
"planningForDate": "",
|
||||
"@planningForDate": {
|
||||
"placeholders": {
|
||||
"date": { "type": "String" }
|
||||
}
|
||||
},
|
||||
"markAsEaten": "",
|
||||
"plannedMealLabel": ""
|
||||
}
|
||||
|
||||
@@ -123,5 +123,13 @@
|
||||
},
|
||||
"servingsLabel": "人前",
|
||||
"addToDiary": "日記に追加",
|
||||
"scanDishPhoto": "写真をスキャン"
|
||||
"scanDishPhoto": "写真をスキャン",
|
||||
"planningForDate": "",
|
||||
"@planningForDate": {
|
||||
"placeholders": {
|
||||
"date": { "type": "String" }
|
||||
}
|
||||
},
|
||||
"markAsEaten": "",
|
||||
"plannedMealLabel": ""
|
||||
}
|
||||
|
||||
@@ -123,5 +123,13 @@
|
||||
},
|
||||
"servingsLabel": "인분",
|
||||
"addToDiary": "일기에 추가",
|
||||
"scanDishPhoto": "사진 스캔"
|
||||
"scanDishPhoto": "사진 스캔",
|
||||
"planningForDate": "",
|
||||
"@planningForDate": {
|
||||
"placeholders": {
|
||||
"date": { "type": "String" }
|
||||
}
|
||||
},
|
||||
"markAsEaten": "",
|
||||
"plannedMealLabel": ""
|
||||
}
|
||||
|
||||
@@ -789,6 +789,24 @@ abstract class AppLocalizations {
|
||||
/// In en, this message translates to:
|
||||
/// **'Scan photo'**
|
||||
String get scanDishPhoto;
|
||||
|
||||
/// No description provided for @planningForDate.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Planning for {date}'**
|
||||
String planningForDate(String date);
|
||||
|
||||
/// No description provided for @markAsEaten.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Mark as eaten'**
|
||||
String get markAsEaten;
|
||||
|
||||
/// No description provided for @plannedMealLabel.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Planned'**
|
||||
String get plannedMealLabel;
|
||||
}
|
||||
|
||||
class _AppLocalizationsDelegate
|
||||
|
||||
@@ -348,4 +348,15 @@ class AppLocalizationsAr extends AppLocalizations {
|
||||
|
||||
@override
|
||||
String get scanDishPhoto => 'مسح الصورة';
|
||||
|
||||
@override
|
||||
String planningForDate(String date) {
|
||||
return '';
|
||||
}
|
||||
|
||||
@override
|
||||
String get markAsEaten => '';
|
||||
|
||||
@override
|
||||
String get plannedMealLabel => '';
|
||||
}
|
||||
|
||||
@@ -350,4 +350,15 @@ class AppLocalizationsDe extends AppLocalizations {
|
||||
|
||||
@override
|
||||
String get scanDishPhoto => 'Foto scannen';
|
||||
|
||||
@override
|
||||
String planningForDate(String date) {
|
||||
return '';
|
||||
}
|
||||
|
||||
@override
|
||||
String get markAsEaten => '';
|
||||
|
||||
@override
|
||||
String get plannedMealLabel => '';
|
||||
}
|
||||
|
||||
@@ -348,4 +348,15 @@ class AppLocalizationsEn extends AppLocalizations {
|
||||
|
||||
@override
|
||||
String get scanDishPhoto => 'Scan photo';
|
||||
|
||||
@override
|
||||
String planningForDate(String date) {
|
||||
return 'Planning for $date';
|
||||
}
|
||||
|
||||
@override
|
||||
String get markAsEaten => 'Mark as eaten';
|
||||
|
||||
@override
|
||||
String get plannedMealLabel => 'Planned';
|
||||
}
|
||||
|
||||
@@ -350,4 +350,15 @@ class AppLocalizationsEs extends AppLocalizations {
|
||||
|
||||
@override
|
||||
String get scanDishPhoto => 'Escanear foto';
|
||||
|
||||
@override
|
||||
String planningForDate(String date) {
|
||||
return '';
|
||||
}
|
||||
|
||||
@override
|
||||
String get markAsEaten => '';
|
||||
|
||||
@override
|
||||
String get plannedMealLabel => '';
|
||||
}
|
||||
|
||||
@@ -351,4 +351,15 @@ class AppLocalizationsFr extends AppLocalizations {
|
||||
|
||||
@override
|
||||
String get scanDishPhoto => 'Scanner une photo';
|
||||
|
||||
@override
|
||||
String planningForDate(String date) {
|
||||
return '';
|
||||
}
|
||||
|
||||
@override
|
||||
String get markAsEaten => '';
|
||||
|
||||
@override
|
||||
String get plannedMealLabel => '';
|
||||
}
|
||||
|
||||
@@ -349,4 +349,15 @@ class AppLocalizationsHi extends AppLocalizations {
|
||||
|
||||
@override
|
||||
String get scanDishPhoto => 'फ़ोटो स्कैन करें';
|
||||
|
||||
@override
|
||||
String planningForDate(String date) {
|
||||
return '';
|
||||
}
|
||||
|
||||
@override
|
||||
String get markAsEaten => '';
|
||||
|
||||
@override
|
||||
String get plannedMealLabel => '';
|
||||
}
|
||||
|
||||
@@ -350,4 +350,15 @@ class AppLocalizationsIt extends AppLocalizations {
|
||||
|
||||
@override
|
||||
String get scanDishPhoto => 'Scansiona foto';
|
||||
|
||||
@override
|
||||
String planningForDate(String date) {
|
||||
return '';
|
||||
}
|
||||
|
||||
@override
|
||||
String get markAsEaten => '';
|
||||
|
||||
@override
|
||||
String get plannedMealLabel => '';
|
||||
}
|
||||
|
||||
@@ -347,4 +347,15 @@ class AppLocalizationsJa extends AppLocalizations {
|
||||
|
||||
@override
|
||||
String get scanDishPhoto => '写真をスキャン';
|
||||
|
||||
@override
|
||||
String planningForDate(String date) {
|
||||
return '';
|
||||
}
|
||||
|
||||
@override
|
||||
String get markAsEaten => '';
|
||||
|
||||
@override
|
||||
String get plannedMealLabel => '';
|
||||
}
|
||||
|
||||
@@ -347,4 +347,15 @@ class AppLocalizationsKo extends AppLocalizations {
|
||||
|
||||
@override
|
||||
String get scanDishPhoto => '사진 스캔';
|
||||
|
||||
@override
|
||||
String planningForDate(String date) {
|
||||
return '';
|
||||
}
|
||||
|
||||
@override
|
||||
String get markAsEaten => '';
|
||||
|
||||
@override
|
||||
String get plannedMealLabel => '';
|
||||
}
|
||||
|
||||
@@ -350,4 +350,15 @@ class AppLocalizationsPt extends AppLocalizations {
|
||||
|
||||
@override
|
||||
String get scanDishPhoto => 'Escanear foto';
|
||||
|
||||
@override
|
||||
String planningForDate(String date) {
|
||||
return '';
|
||||
}
|
||||
|
||||
@override
|
||||
String get markAsEaten => '';
|
||||
|
||||
@override
|
||||
String get plannedMealLabel => '';
|
||||
}
|
||||
|
||||
@@ -348,4 +348,15 @@ class AppLocalizationsRu extends AppLocalizations {
|
||||
|
||||
@override
|
||||
String get scanDishPhoto => 'Сканировать фото';
|
||||
|
||||
@override
|
||||
String planningForDate(String date) {
|
||||
return 'Планирование на $date';
|
||||
}
|
||||
|
||||
@override
|
||||
String get markAsEaten => 'Отметить как съеденное';
|
||||
|
||||
@override
|
||||
String get plannedMealLabel => 'Запланировано';
|
||||
}
|
||||
|
||||
@@ -347,4 +347,15 @@ class AppLocalizationsZh extends AppLocalizations {
|
||||
|
||||
@override
|
||||
String get scanDishPhoto => '扫描照片';
|
||||
|
||||
@override
|
||||
String planningForDate(String date) {
|
||||
return '';
|
||||
}
|
||||
|
||||
@override
|
||||
String get markAsEaten => '';
|
||||
|
||||
@override
|
||||
String get plannedMealLabel => '';
|
||||
}
|
||||
|
||||
@@ -123,5 +123,13 @@
|
||||
},
|
||||
"servingsLabel": "Porções",
|
||||
"addToDiary": "Adicionar ao diário",
|
||||
"scanDishPhoto": "Escanear foto"
|
||||
"scanDishPhoto": "Escanear foto",
|
||||
"planningForDate": "",
|
||||
"@planningForDate": {
|
||||
"placeholders": {
|
||||
"date": { "type": "String" }
|
||||
}
|
||||
},
|
||||
"markAsEaten": "",
|
||||
"plannedMealLabel": ""
|
||||
}
|
||||
|
||||
@@ -121,5 +121,13 @@
|
||||
},
|
||||
"servingsLabel": "Порций",
|
||||
"addToDiary": "Добавить в дневник",
|
||||
"scanDishPhoto": "Сканировать фото"
|
||||
"scanDishPhoto": "Сканировать фото",
|
||||
"planningForDate": "Планирование на {date}",
|
||||
"@planningForDate": {
|
||||
"placeholders": {
|
||||
"date": { "type": "String" }
|
||||
}
|
||||
},
|
||||
"markAsEaten": "Отметить как съеденное",
|
||||
"plannedMealLabel": "Запланировано"
|
||||
}
|
||||
|
||||
@@ -123,5 +123,13 @@
|
||||
},
|
||||
"servingsLabel": "份数",
|
||||
"addToDiary": "添加到日记",
|
||||
"scanDishPhoto": "扫描照片"
|
||||
"scanDishPhoto": "扫描照片",
|
||||
"planningForDate": "",
|
||||
"@planningForDate": {
|
||||
"placeholders": {
|
||||
"date": { "type": "String" }
|
||||
}
|
||||
},
|
||||
"markAsEaten": "",
|
||||
"plannedMealLabel": ""
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user