handlePointerUp method

void handlePointerUp(
  1. PointerUpEvent event
)

Implementation

void handlePointerUp(PointerUpEvent event) {
  if (draggingItemId.value != null) {
    // If we have multiple items selected, update all of them
    if (selectedItemIds.isNotEmpty) {
      for (var itemId in selectedItemIds) {
        final index = items.indexWhere((item) => item.id == itemId);
        if (index == -1) continue;

        final item = items[index];

        // Skip if it's a table component
        if (_isTableComponent(item.label)) continue;

        final Offset finalDropPosition =
        Offset(item.positionX ?? 0, item.positionY ?? 0);
        Offset? placementPosition =
        _calculatePlacementPosition(item, finalDropPosition, item.id);

        if (placementPosition != null) {
          items[index] = PrinterDesignerPackageListModel(
            id: item.id,
            type: item.type,
            label: item.label,
            prefix: item.prefix,
            value: item.value,
            imageUrl: item.imageUrl,
            positionX: placementPosition.dx,
            positionY: placementPosition.dy,
            height: item.height,
            width: item.width,
            section: item.section,
            isSelected: item.isSelected,
            customText: item.customText,
            properties: item.properties,
          );
        } else {
          // If placement fails, revert to original position
          items[index] = PrinterDesignerPackageListModel(
            id: item.id,
            type: item.type,
            label: item.label,
            prefix: item.prefix,
            value: item.value,
            imageUrl: item.imageUrl,
            positionX: originalItemPosition.value?.dx ?? item.positionX ?? 0,
            positionY: originalItemPosition.value?.dy ?? item.positionY ?? 0,
            height: item.height,
            width: item.width,
            section: item.section,
            isSelected: item.isSelected,
            customText: item.customText,
            properties: item.properties,
          );
        }
      }
    } else {
      // Single item update (existing code)
      final index =
      items.indexWhere((item) => item.id == draggingItemId.value);
      if (index != -1) {
        final item = items[index];

        // Skip if it's a table component
        if (_isTableComponent(item.label)) {
          draggingItemId.value = null;
          originalItemPosition.value = null;
          itemStartPosition.value = null;
          return;
        }

        final Offset finalDropPosition =
        Offset(item.positionX ?? 0, item.positionY ?? 0);
        Offset? placementPosition =
        _calculatePlacementPosition(item, finalDropPosition, item.id);

        if (placementPosition != null) {
          items[index] = PrinterDesignerPackageListModel(
            id: item.id,
            type: item.type,
            label: item.label,
            prefix: item.prefix,
            value: item.value,
            imageUrl: item.imageUrl,
            positionX: placementPosition.dx,
            positionY: placementPosition.dy,
            height: item.height,
            width: item.width,
            section: item.section,
            isSelected: item.isSelected,
            customText: item.customText,
            properties: item.properties,
          );
        } else {
          items[index] = PrinterDesignerPackageListModel(
            id: item.id,
            type: item.type,
            label: item.label,
            prefix: item.prefix,
            value: item.value,
            imageUrl: item.imageUrl,
            positionX: originalItemPosition.value?.dx ?? item.positionX ?? 0,
            positionY: originalItemPosition.value?.dy ?? item.positionY ?? 0,
            height: item.height,
            width: item.width,
            section: item.section,
            isSelected: item.isSelected,
            customText: item.customText,
            properties: item.properties,
          );
          Get.snackbar(
            "Space Error",
            "Could not find space to place the component here.",
            backgroundColor: Colors.orange,
            duration: Duration(seconds: 2),
          );
        }
      }
    }

    draggingItemId.value = null;
    originalItemPosition.value = null;
    itemStartPosition.value = null;
  }
}