import 'package:flutter/material.dart'; import '../../../controllers/localization/localization.dart'; import '../../../models/lookup.dart'; import '../../../models/pantry/pm_kit.dart'; import '../../app_style/sizing.dart'; import '../app_text_form_field.dart'; import '../buttons/app_button.dart'; import '../buttons/app_small_button.dart'; import '../parts/auto_complete_parts_field.dart'; import '../titles/app_sub_title.dart'; class PentryPMKitForm extends StatefulWidget { final List? models; final bool? enableValidate; const PentryPMKitForm({ Key? key, this.models, this.enableValidate, }) : super(key: key); @override State createState() => _PentryPMKitFormState(); } class _PentryPMKitFormState extends State { @override Widget build(BuildContext context) { final subtitle = AppLocalization.of(context)?.subtitle; return ListView.builder( padding: EdgeInsets.only( top: 12 * AppStyle.getScaleFactor(context), left: 12 * AppStyle.getScaleFactor(context), right: 12 * AppStyle.getScaleFactor(context), bottom: 80 * AppStyle.getScaleFactor(context)), itemCount: (widget.models?.length ?? 0) + 1, itemBuilder: (context, index) { if (index == widget.models?.length) { return AButton( text: subtitle?.add ?? "", onPressed: () { widget.models?.add(PMKit()); setState(() {}); }, ); } final model = widget.models![index]; return ListView( shrinkWrap: true, physics: const ClampingScrollPhysics(), children: [ Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ ASubTitle("#${index + 1}"), if (index != 0) ASmallButton( color: Theme.of(context).colorScheme.error, text: subtitle?.delete ?? "", onPressed: () { widget.models?.remove(model); setState(() {}); }, ), ], ), const SizedBox( height: 8, ), const ASubTitle("Item Code"), const SizedBox( height: 4, ), AutoCompletePartsField( clearAfterPick: false, initialValue: (model.itemCode?.label ?? "").toString(), onPick: (part) { model.itemCode = Lookup(id: int.tryParse(part.id!), label: part.code); }, ), const SizedBox( height: 8, ), const ASubTitle("Item Name"), const SizedBox( height: 4, ), ATextFormField( initialValue: (model.itemName ?? "").toString(), textAlign: TextAlign.center, style: Theme.of(context).textTheme.subtitle1, textInputType: TextInputType.text, onChange: (value) { model.itemName = value; }, ), const SizedBox( height: 8, ), const ASubTitle("Preparation Time Frame"), const SizedBox( height: 4, ), ATextFormField( initialValue: (model.preparationTimeFrame ?? "").toString(), textAlign: TextAlign.center, style: Theme.of(context).textTheme.subtitle1, textInputType: TextInputType.text, onChange: (value) { model.preparationTimeFrame = value; }, ), const SizedBox( height: 8, ), const ASubTitle("kit Frequency Demand"), const SizedBox( height: 4, ), ATextFormField( initialValue: (model.kitFrequencyDemand ?? "").toString(), textAlign: TextAlign.center, style: Theme.of(context).textTheme.subtitle1, textInputType: TextInputType.text, onChange: (value) { model.kitFrequencyDemand = value; }, ), const SizedBox( height: 8, ), const ASubTitle("Availability"), const SizedBox( height: 4, ), ATextFormField( initialValue: (model.availability ?? "").toString(), textAlign: TextAlign.center, style: Theme.of(context).textTheme.subtitle1, textInputType: TextInputType.text, onChange: (value) { model.availability = value; }, ), const SizedBox( height: 8, ), const ASubTitle("Quantity Needed"), const SizedBox( height: 4, ), ATextFormField( initialValue: (model.quantityNeeded ?? "").toString(), textAlign: TextAlign.center, style: Theme.of(context).textTheme.subtitle1, textInputType: TextInputType.number, onChange: (value) { model.quantityNeeded = value; }, ), const SizedBox( height: 8, ), const ASubTitle("Quantity Reserved"), const SizedBox( height: 4, ), ATextFormField( initialValue: (model.quantityReserved ?? "").toString(), textAlign: TextAlign.center, style: Theme.of(context).textTheme.subtitle1, textInputType: TextInputType.number, onChange: (value) { model.quantityReserved = value; }, ), const SizedBox( height: 8, ), Divider( color: Theme.of(context).textTheme.titleMedium?.color, ), ], ); }); } }