import 'package:diameter/components/dialogs.dart'; import 'package:diameter/config.dart'; import 'package:diameter/models/log_entry.dart'; import 'package:diameter/models/log_meal.dart'; import 'package:diameter/screens/log/log_meal_detail.dart'; import 'package:flutter/material.dart'; class LogMealListScreen extends StatefulWidget { final LogEntry logEntry; final Function() reload; const LogMealListScreen({Key? key, required this.logEntry, required this.reload}) : super(key: key); @override _LogMealListScreenState createState() => _LogMealListScreenState(); } class _LogMealListScreenState extends State { void reload({String? message}) { widget.reload(); setState(() { if (message != null) { var snackBar = SnackBar( content: Text(message), duration: const Duration(seconds: 2), ); ScaffoldMessenger.of(context) ..removeCurrentSnackBar() ..showSnackBar(snackBar); } }); } void handleEditAction(LogMeal meal) { Navigator.push( context, MaterialPageRoute( builder: (context) => LogMealDetailScreen( logEntry: widget.logEntry, logMeal: meal, ), ), ).then((message) => reload(message: message)); } void onDelete(LogMeal logMeal) { LogMeal.remove(logMeal.id); reload(message: 'Meal deleted'); } void handleDeleteAction(LogMeal meal) async { if (showConfirmationDialogOnDelete) { Dialogs.showConfirmationDialog( context: context, onConfirm: () => onDelete(meal), message: 'Are you sure you want to delete this Meal?', ); } else { onDelete(meal); } } @override Widget build(BuildContext context) { return Column( children: [ Expanded( child: widget.logEntry.meals.isNotEmpty ? ListView.builder( shrinkWrap: true, itemCount: widget.logEntry.meals.length, itemBuilder: (context, index) { final meal = widget.logEntry.meals[index]; return ListTile( onTap: () => handleEditAction(meal), title: Row( children: [ Expanded(child: Text(meal.value)), Expanded( child: Text(meal.carbsPerPortion != null ? '${meal.carbsPerPortion} g carbs' : '')), Expanded( child: Text(meal.bolus != null ? '${meal.bolus} U' : '')) ], ), trailing: IconButton( icon: const Icon( Icons.delete, color: Colors.blue, ), onPressed: () => handleDeleteAction(meal), ), ); }, ) : const Center( child: Text( 'You have not added any Meals to this Log Entry yet!'), ), ), ], ); } }