feat: add product selection step before meal planning
Inserts a new PlanProductsSheet as step 1 of the planning flow. Users see their current products as a multi-select checklist (all selected by default) before choosing the planning mode and dates. - Empty state explains the benefit and offers "Add products" CTA while always allowing "Plan without products" to skip - Selected product IDs flow through PlanMenuSheet → PlanDatePickerSheet → MenuService.generateForDates → backend - Backend: added ProductIDs field to generate-menu request body; uses ListForPromptByIDs when set, ListForPrompt otherwise - Backend: added Repository.ListForPromptByIDs (filtered SQL query) - All 12 ARB locale files updated with planProducts* keys Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -19,6 +19,7 @@ import '../diary/food_search_sheet.dart';
|
||||
import '../menu/menu_provider.dart';
|
||||
import '../menu/plan_date_picker_sheet.dart';
|
||||
import '../menu/plan_menu_sheet.dart';
|
||||
import '../menu/plan_products_sheet.dart';
|
||||
import '../profile/profile_provider.dart';
|
||||
import '../scan/dish_result_screen.dart';
|
||||
import '../scan/recognition_service.dart';
|
||||
@@ -1597,19 +1598,33 @@ class _FutureDayPlanButton extends ConsumerWidget {
|
||||
|
||||
void _openPlanSheet(BuildContext context, WidgetRef ref) {
|
||||
final defaultStart = DateTime.parse(dateString);
|
||||
// Step 1: product selection
|
||||
showModalBottomSheet<void>(
|
||||
context: context,
|
||||
isScrollControlled: true,
|
||||
useSafeArea: true,
|
||||
builder: (_) => PlanMenuSheet(
|
||||
onModeSelected: (mode) {
|
||||
builder: (_) => PlanProductsSheet(
|
||||
onContinue: (selectedProductIds) {
|
||||
// Step 2: planning mode selection
|
||||
showModalBottomSheet<void>(
|
||||
context: context,
|
||||
isScrollControlled: true,
|
||||
useSafeArea: true,
|
||||
builder: (_) => PlanDatePickerSheet(
|
||||
mode: mode,
|
||||
defaultStart: defaultStart,
|
||||
builder: (_) => PlanMenuSheet(
|
||||
selectedProductIds: selectedProductIds,
|
||||
onModeSelected: (mode, productIds) {
|
||||
// Step 3: date / meal type selection
|
||||
showModalBottomSheet<void>(
|
||||
context: context,
|
||||
isScrollControlled: true,
|
||||
useSafeArea: true,
|
||||
builder: (_) => PlanDatePickerSheet(
|
||||
mode: mode,
|
||||
defaultStart: defaultStart,
|
||||
selectedProductIds: productIds,
|
||||
),
|
||||
);
|
||||
},
|
||||
),
|
||||
);
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user