feat(app): implement Product Scan review flow, dynamic batch expiry picker, custom PDFs, PO relationships, and aligned card layouts

This commit is contained in:
Rafhan Mazaya Fathurrahman committed 2026-07-09 12:36:06 +07:00
1 parent 9ff4a4a922
commit 577be04308
69 files changed
+5645 -1657

No files matched your search

@@ -0,0 +1,46 @@
import 'package:flutter/material.dart';
import '../../../config/app_config.dart';
import 'editor_text_field.dart';
class ShipmentDetailsCard extends StatelessWidget {
final TextEditingController kepadaYthCtrl;
final TextEditingController orderUntukCtrl;
final TextEditingController alamatCtrl;
final TextEditingController platTrukCtrl;
final TextEditingController namaDriverCtrl;
const ShipmentDetailsCard({
super.key,
required this.kepadaYthCtrl,
required this.orderUntukCtrl,
required this.alamatCtrl,
required this.platTrukCtrl,
required this.namaDriverCtrl,
});
@override
Widget build(BuildContext context) {
return Card(
elevation: 0,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(AppConfig.borderRadiusMedium),
side: BorderSide(color: Colors.grey.shade300),
),
child: Padding(
padding: AppConfig.paddingLarge,
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text('Detail Pengiriman', style: AppConfig.h2),
const SizedBox(height: AppConfig.spaceLarge),
EditorTextField(label: 'Kepada Yth', controller: kepadaYthCtrl),
EditorTextField(label: 'Order Untuk', controller: orderUntukCtrl),
EditorTextField(label: 'Alamat', controller: alamatCtrl),
EditorTextField(label: 'Plat Truk', controller: platTrukCtrl),
EditorTextField(label: 'Nama Driver', controller: namaDriverCtrl),
],
),
),
);
}
}