resolveVisibleQuestions function
List<Question>
resolveVisibleQuestions(
- List<
Question> questions, - List<
QuestionVisibilityRule> visibilityRules, - AnswerValues answerValues
Implementation
List<Question> resolveVisibleQuestions(
List<Question> questions,
List<QuestionVisibilityRule> visibilityRules,
AnswerValues answerValues,
) {
final visible = <int>{};
final rulesByTarget = <int, List<QuestionVisibilityRule>>{};
final questionsById = {
for (final question in questions)
if (question.id != null) question.id!: question,
};
for (final rule in visibilityRules) {
rulesByTarget.putIfAbsent(rule.targetQuestionId, () => []).add(rule);
}
final result = <Question>[];
for (final question in questions) {
final questionId = question.id;
if (questionId == null) continue;
final rules = rulesByTarget[questionId] ?? const [];
final isVisible =
rules.isEmpty ||
_matchesVisibilityRules(
question,
rules,
questionsById,
visible,
answerValues,
);
if (isVisible) {
visible.add(questionId);
result.add(question);
}
}
return result;
}