|
|
@ -13,7 +13,9 @@ class PentryPPMCheckListForm extends StatefulWidget {
|
|
|
|
final List<PPMCheckList>? models;
|
|
|
|
final List<PPMCheckList>? models;
|
|
|
|
final bool? enableValidate;
|
|
|
|
final bool? enableValidate;
|
|
|
|
const PentryPPMCheckListForm({
|
|
|
|
const PentryPPMCheckListForm({
|
|
|
|
Key? key, this.models, this.enableValidate,
|
|
|
|
Key? key,
|
|
|
|
|
|
|
|
this.models,
|
|
|
|
|
|
|
|
this.enableValidate,
|
|
|
|
}) : super(key: key);
|
|
|
|
}) : super(key: key);
|
|
|
|
|
|
|
|
|
|
|
|
@override
|
|
|
|
@override
|
|
|
@ -21,99 +23,112 @@ class PentryPPMCheckListForm extends StatefulWidget {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
class _PentryPPMCheckListFormState extends State<PentryPPMCheckListForm> {
|
|
|
|
class _PentryPPMCheckListFormState extends State<PentryPPMCheckListForm> {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@override
|
|
|
|
@override
|
|
|
|
Widget build(BuildContext context) {
|
|
|
|
Widget build(BuildContext context) {
|
|
|
|
final subtitle = AppLocalization.of(context)?.subtitle;
|
|
|
|
final subtitle = AppLocalization.of(context)?.subtitle;
|
|
|
|
return ListView.builder(
|
|
|
|
return ListView.builder(
|
|
|
|
padding: EdgeInsets.only(
|
|
|
|
padding: EdgeInsets.only(
|
|
|
|
top: 12 * AppStyle.getScaleFactor(context),
|
|
|
|
top: 12 * AppStyle.getScaleFactor(context), left: 12 * AppStyle.getScaleFactor(context), right: 12 * AppStyle.getScaleFactor(context), bottom: 80 * AppStyle.getScaleFactor(context)),
|
|
|
|
left: 12 * AppStyle.getScaleFactor(context),
|
|
|
|
itemCount: (widget.models?.length ?? 0) + 1,
|
|
|
|
right: 12 * AppStyle.getScaleFactor(context),
|
|
|
|
itemBuilder: (context, index) {
|
|
|
|
bottom: 80 * AppStyle.getScaleFactor(context)
|
|
|
|
if (index == widget.models?.length) {
|
|
|
|
),
|
|
|
|
return AButton(
|
|
|
|
itemCount: (widget.models?.length??0) + 1,
|
|
|
|
text: subtitle?.add ?? "",
|
|
|
|
itemBuilder: (context,index){
|
|
|
|
onPressed: () {
|
|
|
|
if(index == widget.models?.length){
|
|
|
|
widget.models?.add(PPMCheckList());
|
|
|
|
return AButton(
|
|
|
|
setState(() {});
|
|
|
|
text: subtitle?.add??"",
|
|
|
|
|
|
|
|
onPressed: (){
|
|
|
|
|
|
|
|
widget.models!.add(PPMCheckList());
|
|
|
|
|
|
|
|
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("Task"),
|
|
|
|
|
|
|
|
const SizedBox(height: 4,),
|
|
|
|
|
|
|
|
ATextFormField(
|
|
|
|
|
|
|
|
initialValue: (model.title ?? "").toString(),
|
|
|
|
|
|
|
|
textAlign: TextAlign.center,
|
|
|
|
|
|
|
|
style: Theme.of(context).textTheme.subtitle1,
|
|
|
|
|
|
|
|
textInputType: TextInputType.text,
|
|
|
|
|
|
|
|
onChange: (value){
|
|
|
|
|
|
|
|
model.title = value;
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
),
|
|
|
|
|
|
|
|
const SizedBox(height: 8,),
|
|
|
|
|
|
|
|
ASubTitle(subtitle?.status??""),
|
|
|
|
|
|
|
|
const SizedBox(height: 4,),
|
|
|
|
|
|
|
|
PentryTaskStatusMenu(
|
|
|
|
|
|
|
|
initialValue: model.status,
|
|
|
|
|
|
|
|
onSelect: (status){
|
|
|
|
|
|
|
|
model.status = status;
|
|
|
|
|
|
|
|
},
|
|
|
|
},
|
|
|
|
),
|
|
|
|
);
|
|
|
|
const SizedBox(height: 8,),
|
|
|
|
}
|
|
|
|
const ASubTitle("Comment"),
|
|
|
|
final model = widget.models?[index];
|
|
|
|
const SizedBox(height: 4,),
|
|
|
|
return ListView(
|
|
|
|
ATextFormField(
|
|
|
|
shrinkWrap: true,
|
|
|
|
initialValue: (model.comment ?? "").toString(),
|
|
|
|
physics: const ClampingScrollPhysics(),
|
|
|
|
textAlign: TextAlign.center,
|
|
|
|
children: [
|
|
|
|
style: Theme.of(context).textTheme.subtitle1,
|
|
|
|
Row(
|
|
|
|
textInputType: TextInputType.text,
|
|
|
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
|
|
|
onChange: (value){
|
|
|
|
children: [
|
|
|
|
model.comment = value;
|
|
|
|
ASubTitle("#${index + 1}"),
|
|
|
|
},
|
|
|
|
if (index != 0)
|
|
|
|
),
|
|
|
|
ASmallButton(
|
|
|
|
const SizedBox(height: 8,),
|
|
|
|
color: Theme.of(context).colorScheme.error,
|
|
|
|
const ASubTitle("Measured Value"),
|
|
|
|
text: subtitle?.delete,
|
|
|
|
const SizedBox(height: 4,),
|
|
|
|
onPressed: () {
|
|
|
|
ATextFormField(
|
|
|
|
widget.models?.remove(model);
|
|
|
|
initialValue: (model.measuredValue ?? "").toString(),
|
|
|
|
setState(() {});
|
|
|
|
textAlign: TextAlign.center,
|
|
|
|
},
|
|
|
|
style: Theme.of(context).textTheme.subtitle1,
|
|
|
|
),
|
|
|
|
textInputType: TextInputType.text,
|
|
|
|
],
|
|
|
|
onChange: (value){
|
|
|
|
),
|
|
|
|
model.measuredValue = value;
|
|
|
|
const SizedBox(
|
|
|
|
},
|
|
|
|
height: 8,
|
|
|
|
),
|
|
|
|
),
|
|
|
|
const SizedBox(height: 8,),
|
|
|
|
const ASubTitle("Task"),
|
|
|
|
Divider(color: Theme.of(context).textTheme.titleMedium?.color,),
|
|
|
|
const SizedBox(
|
|
|
|
],
|
|
|
|
height: 4,
|
|
|
|
);
|
|
|
|
),
|
|
|
|
}
|
|
|
|
ATextFormField(
|
|
|
|
);
|
|
|
|
initialValue: (model?.title ?? "").toString(),
|
|
|
|
|
|
|
|
textAlign: TextAlign.center,
|
|
|
|
|
|
|
|
style: Theme.of(context).textTheme.subtitle1,
|
|
|
|
|
|
|
|
textInputType: TextInputType.text,
|
|
|
|
|
|
|
|
onChange: (value) {
|
|
|
|
|
|
|
|
model?.title = value;
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
),
|
|
|
|
|
|
|
|
const SizedBox(
|
|
|
|
|
|
|
|
height: 8,
|
|
|
|
|
|
|
|
),
|
|
|
|
|
|
|
|
ASubTitle(subtitle?.status ?? ""),
|
|
|
|
|
|
|
|
const SizedBox(
|
|
|
|
|
|
|
|
height: 4,
|
|
|
|
|
|
|
|
),
|
|
|
|
|
|
|
|
PentryTaskStatusMenu(
|
|
|
|
|
|
|
|
initialValue: model?.status,
|
|
|
|
|
|
|
|
onSelect: (status) {
|
|
|
|
|
|
|
|
model?.status = status;
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
),
|
|
|
|
|
|
|
|
const SizedBox(
|
|
|
|
|
|
|
|
height: 8,
|
|
|
|
|
|
|
|
),
|
|
|
|
|
|
|
|
const ASubTitle("Comment"),
|
|
|
|
|
|
|
|
const SizedBox(
|
|
|
|
|
|
|
|
height: 4,
|
|
|
|
|
|
|
|
),
|
|
|
|
|
|
|
|
ATextFormField(
|
|
|
|
|
|
|
|
initialValue: (model?.comment ?? "").toString(),
|
|
|
|
|
|
|
|
textAlign: TextAlign.center,
|
|
|
|
|
|
|
|
style: Theme.of(context).textTheme.subtitle1,
|
|
|
|
|
|
|
|
textInputType: TextInputType.text,
|
|
|
|
|
|
|
|
onChange: (value) {
|
|
|
|
|
|
|
|
model?.comment = value;
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
),
|
|
|
|
|
|
|
|
const SizedBox(
|
|
|
|
|
|
|
|
height: 8,
|
|
|
|
|
|
|
|
),
|
|
|
|
|
|
|
|
const ASubTitle("Measured Value"),
|
|
|
|
|
|
|
|
const SizedBox(
|
|
|
|
|
|
|
|
height: 4,
|
|
|
|
|
|
|
|
),
|
|
|
|
|
|
|
|
ATextFormField(
|
|
|
|
|
|
|
|
initialValue: (model?.measuredValue ?? "").toString(),
|
|
|
|
|
|
|
|
textAlign: TextAlign.center,
|
|
|
|
|
|
|
|
style: Theme.of(context).textTheme.subtitle1,
|
|
|
|
|
|
|
|
textInputType: TextInputType.text,
|
|
|
|
|
|
|
|
onChange: (value) {
|
|
|
|
|
|
|
|
model?.measuredValue = value;
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
),
|
|
|
|
|
|
|
|
const SizedBox(
|
|
|
|
|
|
|
|
height: 8,
|
|
|
|
|
|
|
|
),
|
|
|
|
|
|
|
|
Divider(
|
|
|
|
|
|
|
|
color: Theme.of(context).textTheme.titleMedium?.color,
|
|
|
|
|
|
|
|
),
|
|
|
|
|
|
|
|
],
|
|
|
|
|
|
|
|
);
|
|
|
|
|
|
|
|
});
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|