xEditDialog method
Dialog per l'editing dei campi con i vari pulsanti di help
Implementation
Future<dynamic> xEditDialog(XFDataItem item, String title, dynamic value, XCol xCol, {List<ScontiBTN>? liSconti, bool btns_Active = true}) async {
XFDataItem itemClone = item.getCloneFull();
FocusScope.of(context).unfocus();
TextEditingController textController = TextEditingController(
text: itemClone[xCol.colKey].runtimeType != DateTime
? itemClone[xCol.colKey].toString()
: itemClone[xCol.colKey] != null
? XUtils.dateToString(itemClone[xCol.colKey], format: "dd/MM/yyyy", noDateLabel: "")
: XUtils.dateToString(DateTime.now(), format: "dd/MM/yyyy", noDateLabel: ""));
var clipboard_isFull = await Clipboard.getData("text/plain");
var res = await showDialog<dynamic>(
context: context,
barrierDismissible: false,
barrierColor: Colors.black.withAlpha(230),
builder: (context) {
return StatefulBuilder(builder: (context, setState) {
return Container(
width: kIsWeb ? MediaQuery.of(context).size.width / 2 : MediaQuery.of(context).size.width - 10,
alignment: Alignment.center,
child: SingleChildScrollView(
child: XAlertDialog(
colorBackGround: XSchedaState.color_BackGround_EditDialog,
actionsBTNarea_Padding: EdgeInsets.symmetric(horizontal: 5),
content_insetPadding: EdgeInsets.all(2),
width: kIsWeb ? MediaQuery.of(context).size.width / 2 : MediaQuery.of(context).size.width - 10,
content_VerticalPadding: 2,
height: null,
title_Text: title,
title_Style: XStyles.xStyTextForLabel(textColor: Colors.blue),
btnNO_OnPressed: () => Navigator.pop(context, null),
actionsBTNarea_Child: Container(
padding: EdgeInsets.only(bottom: 10),
child: Row(mainAxisAlignment: MainAxisAlignment.center, children: [
XBtnbase(
width: 120,
label: "Annulla",
label_Style: XStyles.xStyTextForSubLabel(textColor: Colors.red),
backGroundColor: Colors.red.withAlpha(60),
onPressed: () => Navigator.pop(context, null),
),
SizedBox(width: 10),
XBtnbase(
width: 120,
label: "OK",
label_Style: XStyles.xStyTextForSubLabel(textColor: Colors.green),
backGroundColor: Colors.green.withAlpha(60),
onPressed: () {
if (value != textController.text) setState(() => editedPage.value = true);
if (xCol.dataType == String && xCol.colKey.startsWith("li").not()) {
value = textController.text;
} else if (xCol.dataType == DateTime) {
value = itemClone[xCol.colKey];
} else if (xCol.dataType == double) {
if (textController.text != "") {
value = double.parse(textController.text);
} else {
value = 0.0;
}
} else if (xCol.dataType == int) {
if (textController.text != "") {
value = int.parse(textController.text);
} else {
value = 0;
}
}
// lo fa giĆ xOnXCell_Edit_SubmitValue
xOnXCell_Edit_SubmitValue_INTERNAL(item, xCol, value);
Navigator.pop(context, value);
})
])),
child: xEditDialog_Override_Editor(xCol.colCaption, value, xCol, textController, item: itemClone) != null
? xEditDialog_Override_Editor(xCol.colCaption, value, xCol, textController, item: itemClone)
: (xCol.dataType == String && xCol.colKey.startsWith("li").not() && xCol.dataType != DateTime && (xCol.colKey.contains("sconti") || xCol.colKey.contains("sconto")))
? xEditDialog_Sconto(itemClone, xCol, textController, setState, liSconti: liSconti)
: Column(mainAxisAlignment: MainAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.start, children: [
SizedBox(height: 3),
(xCol.dataType == String && xCol.colKey.startsWith("li").not() && (xCol.colKey.contains("sconti") || xCol.colKey.contains("sconto")))
? Row(mainAxisAlignment: MainAxisAlignment.center, children: [
Expanded(child: xEditDialog_CellBuilder(itemClone, xCol, context, setState, textController, autoFocus: true)),
SizedBox(width: 10),
builderXEditDialog_BTNs(itemClone, textController, "C", false, setState),
])
: xCol.dataType == String && xCol.colKey.startsWith("li").not()
? Column(mainAxisAlignment: MainAxisAlignment.center, children: [
Row(children: [Expanded(child: xEditDialog_CellBuilder(itemClone, xCol, context, setState, textController, autoFocus: true))]),
SizedBox(height: 10),
Row(mainAxisAlignment: MainAxisAlignment.end, children: [
clipboard_isFull != null
? XBtnbase(
width: 60,
label: "Incolla",
label_TextAlign: TextAlign.center,
label_Color: Colors.white,
padding: EdgeInsets.all(0),
backGroundColor: Colors.grey[700],
onPressed: () async {
await Clipboard.getData("text/plain").then((value) => textController.text += " " + (value != null ? (value.text ?? "") : ""));
ScaffoldMessenger.of(context).showSnackBar(SnackBar(content: Text('Testo incollato dagli appunti')));
})
: Container(),
SizedBox(width: 20),
XBtnbase(
width: 60,
label: "Copia \nTutto",
label_TextAlign: TextAlign.center,
label_Color: Colors.white,
padding: EdgeInsets.all(0),
backGroundColor: Colors.grey[700],
onPressed: () {
Clipboard.setData(ClipboardData(text: textController.text));
ScaffoldMessenger.of(context).showSnackBar(SnackBar(content: Text('Testo copiato negli appunti')));
}),
SizedBox(width: 20),
builderXEditDialog_BTNs(itemClone, textController, "C", false, setState),
])
])
: xCol.dataType == DateTime
? Row(mainAxisAlignment: MainAxisAlignment.center, children: [Expanded(child: xEditDialog_CellBuilder(itemClone, xCol, context, setState, textController))]) //
: Row(mainAxisAlignment: MainAxisAlignment.center, children: [
Expanded(child: xEditDialog_CellBuilder(itemClone, xCol, context, setState, textController, autoFocus: true)),
SizedBox(width: 10),
builderXEditDialog_BTNs(itemClone, textController, "C", false, setState),
]),
SizedBox(height: 10),
btns_Active && ((xCol.dataType == String).not() && xCol.dataType != DateTime)
? Row(mainAxisAlignment: MainAxisAlignment.center, children: [
Expanded(
child: Wrap(alignment: WrapAlignment.end, spacing: 8, runSpacing: 8, children: [
builderXEditDialog_BTNs(itemClone, textController, "+20", false, setState, xCol: xCol),
builderXEditDialog_BTNs(itemClone, textController, "+10", false, setState, xCol: xCol),
builderXEditDialog_BTNs(itemClone, textController, "+5", false, setState, xCol: xCol),
builderXEditDialog_BTNs(itemClone, textController, "+3", false, setState, xCol: xCol),
xCol.dataType == String && xCol.colKey.startsWith("li").not() ? Container() : builderXEditDialog_BTNs(itemClone, textController, "+1", false, setState, xCol: xCol),
]))
])
: Container(),
]))));
});
});
return res;
}