execute method
Implementation
@override
void execute(EditorState state) {
final elements = List<EditorElement>.from(state.elements);
if (parentId != null) {
final pIndex = elements.indexWhere((e) => e.id == parentId);
if (pIndex != -1) {
final parent = elements[pIndex].element;
if (parent is KoiTicketForEachElement) {
final newTemplates = List<KoiTicketElement>.from(parent.templates);
if (element.element is! KoiTicketElement) return;
final ticketEl = element.element as KoiTicketElement;
if (index != null && index! >= 0 && index! <= newTemplates.length) {
newTemplates.insert(index!, ticketEl);
} else {
newTemplates.add(ticketEl);
}
elements[pIndex] = elements[pIndex].copyWith(
element: KoiTicketForEachElement(
listKey: parent.listKey,
templates: newTemplates,
),
);
}
}
} else {
if (index != null && index! >= 0 && index! <= elements.length) {
elements.insert(index!, element);
} else {
elements.add(element);
}
}
state.updateElements(elements);
// 选中仍然保留到容器(因为子元素没有 ID 追踪,这是一个简化版实现)
state.selectElement(parentId ?? element.id);
}