fetchValue method
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,
);
}