answerQuestion method

AnswerStatus answerQuestion(
  1. AnswerValue? data, {
  2. FormIndex? index,
  3. bool midSurvey = false,
})

Answers the question at index (by default the current one) with data if it is non-empty for a required question and satisfies the constraint.

Implementation

AnswerStatus answerQuestion(
  AnswerValue? data, {
  FormIndex? index,
  bool midSurvey = false,
}) {
  index ??= model.formIndex;
  final question = model.questionPrompt(index).question;
  if (model.event(index) != FormEntryEvent.question) {
    throw StateError('Non-Question object at the form index.');
  }
  final element = model.treeElement(index)!;
  final complex = question.isComplex;
  if (element.isRequired && data == null) {
    return AnswerStatus.requiredButEmpty;
  }
  if (!complex && !_form.evaluateConstraint(index.reference!, data)) {
    return AnswerStatus.constraintViolated;
  }
  if (!complex) {
    _commitAnswer(element, index, data, midSurvey: midSurvey);
  } else {
    _form.copyItemsetAnswer(question, element, data);
  }
  return AnswerStatus.ok;
}