As a developer, I want to standardize the way question view-models behave
Requirements
Implement a abstract class QuestionViewModel extending BaseViewModel, that:
provide an implementation of
onCancelPressed: handle QuizAppBar cancel button
onReportPressed: handle report button pressed on the QuestionResult widget
_onError: display the QuestionResult of a wrong answer
_onSuccess: display the QuestionResult of a wrong answer
_determineAskAgain: determine if the question needs to be ask again during the quiz
provide signature of onSubmitPressed, function that will be called when the answer is submitted for validation
requires:
Question question
onAnswered(bool askAgain)
What needs to be done
Implement under practice/questions, a view model QuestionViewModel:
constructor needs:
Question question
onAnswered(bool askAgain)
GoRouter router
add the signature onSubmitPressed()
Implement:
_onSuccess({String? explanation, bool skipResultDialog = false}): open a BottomSheetDialog containing QuestionResult for a correct answer, and onContinuePressed: onAnswered(false) if skipResultDialog is false. Otherwise, call directly onAnswered(false)
As a developer, I want to standardize the way question view-models behave
Requirements
Implement a abstract class
QuestionViewModel
extendingBaseViewModel
, that:onCancelPressed
: handleQuizAppBar
cancel buttononReportPressed
: handle report button pressed on theQuestionResult
widget_onError
: display theQuestionResult
of a wrong answer_onSuccess
: display theQuestionResult
of a wrong answer_determineAskAgain
: determine if the question needs to be ask again during the quizonSubmitPressed
, function that will be called when the answer is submitted for validationQuestion question
onAnswered(bool askAgain)
What needs to be done
Implement under
practice/questions
, a view modelQuestionViewModel
:Question question
onAnswered(bool askAgain)
GoRouter router
onSubmitPressed()
_onSuccess({String? explanation, bool skipResultDialog = false})
: open aBottomSheetDialog
containingQuestionResult
for a correct answer, andonContinuePressed: onAnswered(false)
ifskipResultDialog
is false. Otherwise, call directlyonAnswered(false)
_onError(bool askAgain, {bool isFinished = true, String? explanation, VoidCallback? onContinuePressed})
:BottomSheetDialog
containingQuestionResult
for a false answerisFinished
true,onContinuePressed: onAnswered(askAgain)
, otherwise close the dialogisFinished
is false andonContinuePressed
is provided,QuestionResult.onContinuePressed: onContinuePressed
_determineAskAgain(KnowledgeUpdate? toUpdate)
:toUpdate
is null, taketoUpdate = question.knowledgeUpdates[0]
toUpdate.grade > 0
onCancelPressed()
, open a confirmation dialog to ask confirm exiting the quizonReportPressed()
, open the report feature with Bug selectedDependencies
Child of #160
Depends on:
167
170