handlePointerUp method
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;
}
}