xCMD_xOnAddDett method

Future xCMD_xOnAddDett()

Implementation

Future xCMD_xOnAddDett() async {
  var x = await xInitList_AddDetts();
  var t;
  if (x.length == 1) {
    var p = xTabs.value.firstWhereOrNull((element) => element.key == x.first.key);
    if (p == null)
      xTabs_ChangeActive(x.first.key, forceAdd: true);
    else
      xTabs_ChangeActive(x.first.key);
    t = x.first.key;
  } else {
    var p = xTab_Active != null ? xTabs.value.firstWhereOrNull((element) => element.key == xTab_Active!.key) : null;
    if (p != null) {
      t = p.key;
      xTabs_ChangeActive(t);
    } else {
      t = await showDialog(
          context: context,
          builder: (context) {
            return XAlertDialog(
                height: null,
                title_Text: "Scegli quale dettaglio aggiungere:",
                actionsBTNarea_Child: Row(children: [
                  Expanded(
                      child: XBtnbase(
                    label: "Chiudi",
                    backGroundColor: Colors.grey[800],
                    label_Style: XStyles.xStyTextForLabel(textColor: XColors.undo),
                    onPressed: () => Navigator.pop(context, null),
                  ))
                ]),
                title_Style: XStyles.xStyTextForTextBase(),
                child: Column(
                    mainAxisSize: MainAxisSize.min,
                    children: x
                        .map((e) => Row(children: [
                              Expanded(
                                  child: XBtnbase(
                                margin: EdgeInsets.symmetric(vertical: 5),
                                label: e.label,
                                backGroundColor: Colors.grey[800],
                                height: 35,
                                onPressed: () {
                                  var x = xTabs.value.firstWhereOrNull((element) => element.key == e.key);
                                  if (x == null)
                                    xTabs_ChangeActive(e.key, forceAdd: true);
                                  else
                                    xTabs_ChangeActive(e.key);
                                  Navigator.pop(context, e.key);
                                },
                                label_Style: XStyles.xStyTextForSubLabel(textColor: e.backgroundColor),
                              ))
                            ]))
                        .toList()));
          });
    }
  }

  if (t != null && t != "" && t == xTab_Active!.key) {
    var xclObject = xTab_Active!.itemClass!.getCloneFull();
    await xOnAddNewDett_setData_INTERNAL(xclObject);
    bool resDlg = false;

    if (xIsActive_AddItem_DefaultBL) {
      if (xTab_Active != null && xTab_Active!.xElencoToView != null && xTab_Active!.xElencoToView!.xCells_EditType != null) {
        if (xTab_Active!.xElencoToView!.xCells_EditType!.value == XEnums.editType.scheda.value) {
          resDlg = await xOnBefore_AddDett(xclObject).then((value) {
            if (value) {
              xOnAfterActionOnDett_INTERNAL(xclObject);
              return true;
            } else
              return false;
          });
        } else {
          // FORM-xPreview_Dialog
          if (xTab_Active!.xElencoToView!.xCells_EditType!.value == XEnums.editType.form.value) {
            var _view = XView("AddView");
            _view.cols.addAll(xTab_Active!.xElencoToView!.liCols_EditData ?? []);
            await xOnBefore_AddDett(xclObject);
            resDlg = await xPreview_Dialog(xTab_Active!.xElencoToView!.liCols_EditData!.isEmpty ? xTab_Active!.xElencoToView!.xView_ForEditItem ?? xTab_Active!.xElencoToView!.view ?? xTab_Active!.xElencoToView!.viewDetts! : _view, xclObject, isWeb: kIsWeb);
          } else if (xTab_Active!.xElencoToView!.xCells_EditType!.value == XEnums.editType.stepByStep.value) {
            var _view = XView("AddView");
            _view.cols.addAll(xTab_Active!.xElencoToView!.liCols_EditData ?? []);

            await xOnBefore_AddDett(xclObject);
            resDlg = await xEditDialog_xOnAddItem(xTab_Active!.xElencoToView!.liCols_EditData!.isEmpty ? xTab_Active!.xElencoToView!.xView_ForEditItem ?? xTab_Active!.xElencoToView!.view ?? xTab_Active!.xElencoToView!.viewDetts! : _view, xclObject, setState);
          } else {
            if (xTab_Active!.xElencoToView!.isEditable) {
              xOnAfterActionOnDett_INTERNAL(xclObject);
            } else {
              var _view = XView("AddView");
              _view.cols.addAll(xTab_Active!.xElencoToView!.liCols_EditData ?? []);

              await xOnBefore_AddDett(xclObject);
              resDlg = await xEditDialog_xOnAddItem(xTab_Active!.xElencoToView!.liCols_EditData!.isEmpty ? xTab_Active!.xElencoToView!.xView_ForEditItem ?? xTab_Active!.xElencoToView!.view ?? xTab_Active!.xElencoToView!.viewDetts! : _view, xclObject, setState);
            }
          }
          if (resDlg) {
            await xOnAfter_AddDett(xclObject);
            xOnAfterActionOnDett_INTERNAL(xclObject);
          }
        }
      } else {
        if (widget.xOnBeforeAddDettLayout != null) {
          resDlg = await widget.xOnBeforeAddDettLayout!(xTab_Active!.xElencoToView!.xView_ForEditItem ?? xTab_Active!.xElencoToView!.view!, xclObject, setState);
        } else {
          resDlg = await xLayout_DialogAddItem(xTab_Active!.xElencoToView!.xView_ForEditItem ?? xTab_Active!.xElencoToView!.view!, xclObject, setState);
        }
      }
    }

    bool xOnBeforeAddDettToList_Custom_Result = false;
    bool resBeforeAddItemInList = false;
    if (resDlg || xIsActive_AddItem_DefaultBL.not()) {
      resBeforeAddItemInList = await xOnBeforeAddDettToList(xclObject);
      if (resBeforeAddItemInList.not()) {
        xOnBeforeAddDettToList_Custom_Result = await xOnBeforeAddDettToList_Custom(xclObject);
      }
      // editedPage.value = true; //x ADD
    }
    if (resDlg || xOnBeforeAddDettToList_Custom_Result || resBeforeAddItemInList) {
      //prendo da padre la lista in cui add il dett

      var x = xTabs.value.firstWhereOrNull((element) => element.key == xTab_Active!.key);

      if (resDlg || resBeforeAddItemInList) {
        var liToAddTheItem = itemInEdit_Clone.getProp(t);
        liToAddTheItem.add(xclObject);
      }
      // attivo il tab relativo al tiupo di dett che si sta aggiungendo
      if (x != null) {
        xTab_CurrentIndex = x.idx;
      } else {
        xTab_CurrentIndex = xTab_Active!.idx;
      }
      //refresh UI
      widget.key_Rows = UniqueKey();
      widget.key_Head = UniqueKey();
      xOnAfterActionOnDett_INTERNAL(xclObject);
    }
  }
}