import 'package:cdb_ui/api.dart'; import 'package:flutter/material.dart'; import 'package:intl/intl.dart'; import 'supply.dart'; class ItemView extends StatelessWidget { final Item item; @override Widget build(BuildContext context) { return Scaffold( body: Column(children: [ Row( children: [ const Align( alignment: Alignment.centerLeft, child: Placeholder(), ), // todo Column( children: [ Text( item.name, style: const TextStyle(fontWeight: FontWeight.bold), ), Text(item.category) ], ) ], ), const SizedBox(height: 10), Row( children: item.variants.entries.map((entry) { return Text(entry.value.name); }).toList()), FutureBuilder( future: API().getInventory(item.id), builder: (context, snapshot) { if (!snapshot.hasData) { return const CircularProgressIndicator(); } var data = snapshot.data!; return Expanded( child: ListView( children: data.map((x) => TransactionCard(x)).toList())); }, ) ]), floatingActionButton: FloatingActionButton( onPressed: () { Navigator.of(context).push( MaterialPageRoute(builder: (context) => SupplyPage(item))); }, child: const Icon(Icons.add)), ); } const ItemView({super.key, required this.item}); } class TransactionCard extends StatelessWidget { final Transaction t; const TransactionCard(this.t, {super.key}); @override Widget build(BuildContext context) { return Card( color: t.expired ? Colors.red[100] : Colors.white, margin: EdgeInsets.symmetric(vertical: 8, horizontal: 16), shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(10), ), elevation: 4, child: Padding( padding: EdgeInsets.all(12), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Row( children: [ Text( t.item, style: TextStyle(fontSize: 16), ), SizedBox( width: 4, ), Text( t.variant, style: TextStyle(fontSize: 14, color: Colors.grey[600]), ), ], ), Text( tsFormat(t.timestamp), style: TextStyle(fontSize: 14, color: Colors.grey[700]), ), ], ), SizedBox( height: 10, ), Row( children: [ Icon(Icons.money, size: 18, color: Colors.green), SizedBox(width: 6), Text( "${t.price.value} ${t.price.currency}", style: TextStyle(fontSize: 16, fontWeight: FontWeight.bold), ), ], ), if (t.origin != null) ...[ SizedBox(height: 8), Row( children: [ Icon(Icons.store, size: 18, color: Colors.blue), SizedBox(width: 6), Text( t.origin!, style: TextStyle(fontSize: 14, color: Colors.grey[700]), ), ], ), ], ], ), ), ); } } String tsFormat(int ts) { DateTime dateTime = DateTime.fromMillisecondsSinceEpoch(ts * 1000); return DateFormat('yyyy-MM-dd HH:mm:ss').format(dateTime); }