import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import '../../../domain/models/grocery_item.dart';
import '../../router/router.dart';
import 'history_cubit.dart';
import 'history_state.dart';
class HistoryScreen extends StatelessWidget {
const HistoryScreen({super.key});
@override
Widget build(BuildContext context) {
return BlocBuilder<HistoryCubit, HistoryState>(
builder: (context, state) {
return Scaffold(
appBar: AppBar(
title: const Text('Scan History'),
actions: [
if (state.items.isNotEmpty)
IconButton(
icon: const Icon(Icons.delete_outline),
onPressed: () {
context.read<HistoryCubit>().clearHistory();
},
),
],
),
body: state.isLoading
? const Center(child: CircularProgressIndicator())
: state.items.isNotEmpty
? ListView.builder(
itemCount: state.items.length,
itemBuilder: (context, index) {
final item = state.items[index];
return _HistoryTile(
item: item,
onTap: () {
ItemDetailRouteData(barcode: item.barcode)
.push(context);
},
);
},
)
: const Center(
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
Icon(Icons.history, size: 64, color: Colors.grey),
SizedBox(height: 16),
Text(
'No scanned items yet',
style:
TextStyle(fontSize: 16, color: Colors.grey),
),
],
),
),
);
},
);
}
}
class _HistoryTile extends StatelessWidget {
final GroceryItem item;
final VoidCallback onTap;
const _HistoryTile({required this.item, required this.onTap});
@override
Widget build(BuildContext context) {
return ListTile(
leading: CircleAvatar(
child: Icon(_iconForCategory(item.category)),
),
title: Text(item.name),
subtitle: Text('${item.brand} • ${item.category}'),
trailing: item.price != null
? Text(
'\$${item.price!.toStringAsFixed(2)}',
style: Theme.of(context).textTheme.titleSmall,
)
: null,
onTap: onTap,
);
}
IconData _iconForCategory(String category) {
return switch (category.toLowerCase()) {
'dairy' => Icons.water_drop,
'bakery' => Icons.bakery_dining,
'eggs' => Icons.egg,
'produce' => Icons.eco,
'meat' => Icons.restaurant,
'beverages' => Icons.local_drink,
_ => Icons.shopping_bag,
};
}
}