cashumit/lib/widgets/receipt_item_widget.dart

82 lines
2.2 KiB
Dart

import 'package:flutter/material.dart';
import 'package:google_fonts/google_fonts.dart';
import 'package:intl/intl.dart'; // Untuk format angka
import 'package:cashumit/models/receipt_item.dart';
/// Widget untuk menampilkan satu item dalam struk.
///
/// Widget ini murni untuk tampilan dan tidak memiliki logika interaksi sendiri.
/// Interaksi seperti tap (edit) atau long-press (delete) ditangani oleh
/// widget induk (parent) yang membungkusnya dalam GestureDetector.
class ReceiptItemWidget extends StatelessWidget {
final ReceiptItem item;
const ReceiptItemWidget({
super.key,
required this.item,
});
/// Memformat angka menjadi format mata uang Rupiah
String _formatRupiah(double amount) {
// Menggunakan NumberFormat untuk memformat angka
final formatter = NumberFormat("#,##0", "id_ID");
return "Rp ${formatter.format(amount)}";
}
@override
Widget build(BuildContext context) {
final courierPrime = GoogleFonts.courierPrime(
textStyle: const TextStyle(
fontSize: 14,
height: 1.2,
),
);
return Container(
width: double.infinity,
padding: const EdgeInsets.symmetric(horizontal: 8.0, vertical: 4.0),
color: Colors.white,
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
// Nama item
Expanded(
flex: 4,
child: Text(
item.description,
style: courierPrime,
overflow: TextOverflow.ellipsis,
),
),
// Quantity
Expanded(
flex: 1,
child: Text(
item.quantity.toString(),
textAlign: TextAlign.center,
style: courierPrime,
),
),
// Harga
Expanded(
flex: 2,
child: Text(
_formatRupiah(item.price),
textAlign: TextAlign.right,
style: courierPrime,
),
),
// Total
Expanded(
flex: 2,
child: Text(
_formatRupiah(item.total),
textAlign: TextAlign.right,
style: courierPrime,
),
),
],
),
);
}
}