You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
cloudsolutions-atoms/lib/views/widgets/pentry/pentry_pm_kit_form.dart

185 lines
6.3 KiB
Dart

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<PMKit>? models;
final bool? enableValidate;
const PentryPMKitForm({
Key? key,
this.models,
this.enableValidate,
}) : super(key: key);
@override
State<PentryPMKitForm> createState() => _PentryPMKitFormState();
}
class _PentryPMKitFormState extends State<PentryPMKitForm> {
@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,
),
],
);
});
}
}