execute method

  1. @override
void execute(
  1. EditorState state
)
override

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);
}