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.
98 lines
3.5 KiB
Dart
98 lines
3.5 KiB
Dart
import 'package:flutter/material.dart';
|
|
import 'package:test_sa/extensions/context_extension.dart';
|
|
import 'package:test_sa/extensions/int_extensions.dart';
|
|
import 'package:test_sa/extensions/text_extensions.dart';
|
|
import 'package:test_sa/extensions/widget_extensions.dart';
|
|
import 'package:test_sa/models/lookup.dart';
|
|
import 'package:test_sa/models/pantry/pm_kit.dart';
|
|
import 'package:test_sa/new_views/common_widgets/app_text_form_field.dart';
|
|
import 'package:test_sa/views/widgets/parts/auto_complete_parts_field.dart';
|
|
|
|
import '../../../new_views/app_style/app_color.dart';
|
|
import '../../../new_views/common_widgets/app_filled_button.dart';
|
|
|
|
class PentryPMKitForm extends StatefulWidget {
|
|
final List<PMKit> models;
|
|
final bool enableValidate;
|
|
final num assetId;
|
|
const PentryPMKitForm({
|
|
Key key,
|
|
this.models,
|
|
this.assetId,
|
|
this.enableValidate,
|
|
}) : super(key: key);
|
|
|
|
@override
|
|
State<PentryPMKitForm> createState() => _PentryPMKitFormState();
|
|
}
|
|
|
|
class _PentryPMKitFormState extends State<PentryPMKitForm> {
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
return ListView.builder(
|
|
itemCount: widget.models.length + 1,
|
|
shrinkWrap: true,
|
|
padding: EdgeInsets.only(top: 16.toScreenHeight),
|
|
itemBuilder: (context, index) {
|
|
if (index == widget.models.length) {
|
|
return AppFilledButton(
|
|
label: "Add Item",
|
|
maxWidth: true,
|
|
textColor: Colors.white,
|
|
buttonColor: context.isDark ? AppColor.neutral60 : AppColor.neutral50,
|
|
onPressed: () {
|
|
widget.models.add(PMKit());
|
|
setState(() {});
|
|
},
|
|
);
|
|
}
|
|
final model = widget.models[index];
|
|
final TextEditingController controller = TextEditingController(text: model.quantityNeeded);
|
|
return Container(
|
|
padding: const EdgeInsets.all(16),
|
|
margin: EdgeInsets.only(bottom: 16.toScreenHeight),
|
|
decoration: BoxDecoration(
|
|
color: Theme.of(context).cardColor,
|
|
borderRadius: BorderRadius.circular(20),
|
|
boxShadow: [BoxShadow(color: Colors.black.withOpacity(0.03), blurRadius: 14)],
|
|
),
|
|
child: Column(
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
children: [
|
|
Row(
|
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
|
children: [
|
|
"Item ${index + 1}".heading5(context),
|
|
"trash".toSvgAsset(width: 15, height: 20).onPress(() {
|
|
widget.models.remove(model);
|
|
setState(() {});
|
|
}),
|
|
],
|
|
),
|
|
16.height,
|
|
AutoCompletePartsField(
|
|
assetId: widget.assetId,
|
|
clearAfterPick: false,
|
|
initialValue: (model.itemCode?.name ?? "").toString(),
|
|
onPick: (part) {
|
|
model.itemCode = Lookup(id: part.id, name: part?.sparePart?.partNo);
|
|
model.itemName = part?.sparePart?.partName;
|
|
},
|
|
),
|
|
8.height,
|
|
AppTextFormField(
|
|
controller: controller,
|
|
labelText: context.translation.quantity,
|
|
textInputType: TextInputType.number,
|
|
onChange: (text) {
|
|
model.quantityNeeded = num.tryParse(text ?? "")?.toString();
|
|
},
|
|
),
|
|
],
|
|
),
|
|
);
|
|
},
|
|
);
|
|
}
|
|
}
|