calorimeter/lib/perdate/entry_list.dart
Marco 37cceb3a9b Fix bug that caused infinite loop for selecting FoodEntries
And also, the Cancel button is removed when the FoodEntry is selected.
2024-09-25 18:20:50 +02:00

65 lines
1.9 KiB
Dart

import 'package:calorimeter/food_entry/enter_food_widget.dart';
import 'package:calorimeter/food_entry/food_entry_bloc.dart';
import 'package:calorimeter/food_entry/food_entry_widget.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
class FoodEntryList extends StatelessWidget {
final List<FoodEntryState> entries;
const FoodEntryList({
required this.entries,
super.key,
});
@override
Widget build(BuildContext context) {
return ListView.builder(
itemCount: entries.length + 1,
itemBuilder: (BuildContext itemBuilderContext, int listIndex) {
//last item in list is the widget to enter food
if (listIndex == entries.length) {
return Column(
children: [
EnterFoodWidget(
onAdd: (context, entry) {
context
.read<FoodEntryBloc>()
.add(FoodEntryEvent(entry: entry));
},
),
const SizedBox(height: 75),
],
);
}
var entryIndex = listIndex;
return Column(
children: [
FoodEntryWidget(
key: ValueKey(entries[entryIndex].id),
entry: entries[entryIndex],
onDelete: (_, id) {
context.read<FoodEntryBloc>().add(FoodDeletionEvent(
entryID: id,
));
},
onChange: (_, changedEntry) {
context
.read<FoodEntryBloc>()
.add(FoodChangedEvent(newEntry: changedEntry));
},
onTap: (_, tappedEntry) {
context
.read<FoodEntryBloc>()
.add(FoodEntryTapped(entry: tappedEntry));
},
),
const Divider(),
],
);
},
);
}
}