import 'package:cdb_ui/api.dart'; import 'package:cdb_ui/pages/transaction.dart'; import 'package:flutter/material.dart'; class StatsPage extends StatelessWidget { const StatsPage({super.key}); Future<(List, List, GlobalItemStat)> _fetchData() async { return ( await API().getItemsUnderMin(), await API().getExpiredItems(), await API().getGlobalItemStat() ); } @override Widget build(BuildContext context) { // todo : add global statistics // todo : demand stat // todo : stat on origin + destination return Scaffold( body: FutureBuilder( future: _fetchData(), builder: (context, snapshot) { if (!snapshot.hasData) { return const CircularProgressIndicator(); } var data = snapshot.data!; var min = data.$1; var expired = data.$2; var globalStat = data.$3; return Column( children: [ Card( margin: EdgeInsets.all(10.0), child: Padding( padding: EdgeInsets.all(10.0), child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ IconText(Icons.data_object, "Items: ${globalStat.item_count}"), IconText(Icons.list_alt, "Inventory: ${globalStat.total_transactions}"), IconText(Icons.money, "Price: ${globalStat.total_price.toStringAsFixed(2)} €") ], ), )), if (min.isNotEmpty) const ListTile(title: Text("Items under Minimum")), ...min.map((item) { return ListTile( title: Text( "Item ${item.itemVariant} under minimum. Needs ${item.need} more."), ); }).toList(), if (expired.isNotEmpty) const ListTile(title: Text("Expired Items")), // Mapping expired list to widgets ...expired.map((item) { return ListTile( title: TransactionCard(item, () {}), ); }).toList(), ], ); }, ), ); } }