fetchValue method

Future<NodePickData?> fetchValue()

Implementation

Future<NodePickData?> fetchValue() async {
  var nodes = _state?._nodesCtrl.value ?? [];
  if (_state?._enableNodes.isNotEmpty ?? false) {
    var validator = await _state?._formCtrl.submit();
    if (validator != true) {
      throw Exception("校验失败");
    }
  }

  var diversionNode = nodes.firstWhereOrNull(
      (element) => element.nodeType == FlowApprovalType.diversionApproval);
  var conditionNodes = diversionNode != null
      ? (_state?.widget.nodes
          .where((element) => element.sameDiversion(diversionNode)))
      : nodes;
  var condition = {};
  var formValues = _state?.widget.formValues;
  conditionNodes?.forEach((element) {
    var custom = element.conditionMap;
    custom?.forEach((key, value) {
      value = formValues?[key] ?? value;
      if (condition[key] != value) {
        condition[key] = nodes.contains(element) ? value : "-1";
      }
    });
  });
  var value = _state?._formCtrl.value ?? {};
  var ids = nodes.map((e) => e.id);
  Map<String, List<Members>?> members = {};
  value.forEach((key, value) {
    if (ids.contains(key)) {
      members[key] = value;
    }
  });

  return NodePickData(
    selectedNodes: nodes,
    customCondition: condition.nonValue,
    members: members.nonValue,
    fullNodes: _state?.widget.nodes,
  );
}