processChildren method

  1. @override
Iterable<NodeData> processChildren(
  1. Status status,
  2. NodeControl control,
  3. FlowMessage message
)
override

Implementation

@override
Iterable<NodeData> processChildren(Status status, NodeControl control, FlowMessage message) sync* {
  xml.XmlElement element = node as xml.XmlElement;
  String item = element.getAttribute("item") ?? "item";
  String index = element.getAttribute("index") ?? "index";

  List? arr;
  xml.XmlAttribute? fnode = element.getAttributeNode("array");
  if (fnode != null) {
    arr = status.execute(fnode.value) as List?;
  }
  if (arr == null) {
    fnode = element.getAttributeNode("count");
    arr = [];
    if (fnode != null) {
      var num = status.execute(fnode.value);
      if (num is int) {
        for (int i = 0; i < num; ++i) {
          arr.add(i);
        }
      }
    }
  }

  if (arr.length > 0) {
    for (int i = 0, t = arr.length; i < t; ++i) {
      Status newStatus = status.child({
        item: arr[i],
        index: i
      });
      FlowMessage message = FlowMessage();
      for (var child in children) {
        yield* child.generate(newStatus, control, message);
      }
    }
  }
}