From b85e073d7075b8d45d15f32e62d5761416cdad4a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20G=C3=B6cer?= Date: Wed, 17 Jan 2024 11:01:50 +0100 Subject: [PATCH] fix: type checks --- .../questionnaire_task_widget.dart | 6 ++-- app/lib/screens/study/tasks/task_screen.dart | 17 +++++------ .../questionnaire/question_container.dart | 29 +++++++++---------- core/lib/src/models/questionnaire/answer.dart | 2 +- .../question/question_form_data.dart | 14 ++++----- designer_v2/pubspec.yaml | 2 +- 6 files changed, 34 insertions(+), 36 deletions(-) diff --git a/app/lib/screens/study/tasks/observation/questionnaire_task_widget.dart b/app/lib/screens/study/tasks/observation/questionnaire_task_widget.dart index 0c7ad1bad..b65fb3ea6 100644 --- a/app/lib/screens/study/tasks/observation/questionnaire_task_widget.dart +++ b/app/lib/screens/study/tasks/observation/questionnaire_task_widget.dart @@ -64,9 +64,9 @@ class _QuestionnaireTaskWidgetState extends State { setState(() { _isLoading = true; }); - switch (response.runtimeType) { - case QuestionnaireState _: - await _addQuestionnaireResult(response as QuestionnaireState, context); + switch (response) { + case QuestionnaireState questionnaireState: + await _addQuestionnaireResult(questionnaireState, context); break; } setState(() { diff --git a/app/lib/screens/study/tasks/task_screen.dart b/app/lib/screens/study/tasks/task_screen.dart index 062f3e1ff..971aef910 100644 --- a/app/lib/screens/study/tasks/task_screen.dart +++ b/app/lib/screens/study/tasks/task_screen.dart @@ -34,23 +34,22 @@ class _TaskScreenState extends State { taskInstance = TaskInstance.fromInstanceId(widget.taskInstance.id, study: subject!.study); } - Widget? _buildTask() { - switch (taskInstance.task.runtimeType) { - case CheckmarkTask _: + Widget _buildTask() { + switch (taskInstance.task) { + case CheckmarkTask checkmarkTask: return CheckmarkTaskWidget( - task: taskInstance.task as CheckmarkTask, + task: checkmarkTask, key: UniqueKey(), completionPeriod: taskInstance.completionPeriod, ); - case QuestionnaireTask _: + case QuestionnaireTask questionnaireTask: return QuestionnaireTaskWidget( - task: taskInstance.task as QuestionnaireTask, + task: questionnaireTask, key: UniqueKey(), completionPeriod: taskInstance.completionPeriod, ); default: - print('${taskInstance.task.runtimeType} is not a supported Task!'); - return null; + throw ArgumentError('Task ${taskInstance.task.type} not supported'); } } @@ -93,7 +92,7 @@ class _TaskScreenState extends State { ), ]), const SizedBox(height: 20), - _buildTask()!, + _buildTask(), ], ), ), diff --git a/app/lib/widgets/questionnaire/question_container.dart b/app/lib/widgets/questionnaire/question_container.dart index 5fdcfd661..21c4b5d86 100644 --- a/app/lib/widgets/questionnaire/question_container.dart +++ b/app/lib/widgets/questionnaire/question_container.dart @@ -26,46 +26,45 @@ class _QuestionContainerState extends State with AutomaticKee widget.onDone(answer, widget.index); } - QuestionWidget? getQuestionBody(BuildContext context) { - switch (widget.question.runtimeType) { - case ChoiceQuestion _: + QuestionWidget getQuestionBody(BuildContext context) { + switch (widget.question) { + case ChoiceQuestion choiceQuestion: return ChoiceQuestionWidget( - question: widget.question as ChoiceQuestion, + question: choiceQuestion, onDone: _onDone, multiSelectionText: AppLocalizations.of(context)!.eligible_choice_multi_selection, ); - case BooleanQuestion _: + case BooleanQuestion booleanQuestion: return BooleanQuestionWidget( - question: widget.question as BooleanQuestion, + question: booleanQuestion, onDone: _onDone, ); - case ScaleQuestion _: + case ScaleQuestion scaleQuestion: return ScaleQuestionWidget( - question: widget.question as ScaleQuestion, + question: scaleQuestion, onDone: _onDone, ); - case VisualAnalogueQuestion _: + case VisualAnalogueQuestion visualAnalogueQuestion: // todo remove this when older studies are finished // ignore: deprecated_member_use_from_same_package return VisualAnalogueQuestionWidget( - question: widget.question as VisualAnalogueQuestion, + question: visualAnalogueQuestion, onDone: _onDone, ); - case AnnotatedScaleQuestion _: + case AnnotatedScaleQuestion annotatedScaleQuestion: return AnnotatedScaleQuestionWidget( - question: widget.question as AnnotatedScaleQuestion, + question: annotatedScaleQuestion, onDone: _onDone, ); default: - print('Question not supported!'); - return null; + throw ArgumentError('Question type ${widget.question.type} not supported'); } } @override Widget build(BuildContext context) { super.build(context); - final questionBody = getQuestionBody(context)!; + final questionBody = getQuestionBody(context); return Card( child: Padding( diff --git a/core/lib/src/models/questionnaire/answer.dart b/core/lib/src/models/questionnaire/answer.dart index 66f40b2a4..fc122e0dd 100644 --- a/core/lib/src/models/questionnaire/answer.dart +++ b/core/lib/src/models/questionnaire/answer.dart @@ -26,7 +26,7 @@ class Answer { static Answer fromJson(Map data) { final dynamic value = data[keyResponse]; - switch (value.runtimeType) { + switch (value) { case bool: return Answer.parseJson(data); case num: diff --git a/designer_v2/lib/features/design/shared/questionnaire/question/question_form_data.dart b/designer_v2/lib/features/design/shared/questionnaire/question/question_form_data.dart index 72ca53cc1..b8fdb26d3 100644 --- a/designer_v2/lib/features/design/shared/questionnaire/question/question_form_data.dart +++ b/designer_v2/lib/features/design/shared/questionnaire/question/question_form_data.dart @@ -13,19 +13,19 @@ typedef SurveyQuestionFormDataFactory = QuestionFormData Function( abstract class QuestionFormData implements IFormData { static Map questionTypeFormDataFactories = { SurveyQuestionType.scale: (question, eligibilityCriteria) { - switch (question.runtimeType) { + switch (question) { // First check for general scale which implements the other interfaces - case ScaleQuestion: - return ScaleQuestionFormData.fromDomainModel(question as ScaleQuestion, eligibilityCriteria); + case ScaleQuestion scaleQuestion: + return ScaleQuestionFormData.fromDomainModel(scaleQuestion, eligibilityCriteria); // Remain backward compatible with specialized scale types - case AnnotatedScaleQuestion: + case AnnotatedScaleQuestion annotatedScaleQuestion: return ScaleQuestionFormData.fromDomainModel( - ScaleQuestion.fromAnnotatedScaleQuestion(question as AnnotatedScaleQuestion), + ScaleQuestion.fromAnnotatedScaleQuestion(annotatedScaleQuestion), eligibilityCriteria, ); - case VisualAnalogueQuestion: + case VisualAnalogueQuestion visualAnalogueQuestion: return ScaleQuestionFormData.fromDomainModel( - ScaleQuestion.fromVisualAnalogueQuestion(question as VisualAnalogueQuestion), + ScaleQuestion.fromVisualAnalogueQuestion(visualAnalogueQuestion), eligibilityCriteria, ); } diff --git a/designer_v2/pubspec.yaml b/designer_v2/pubspec.yaml index 3c38d8e2a..19e9322f6 100644 --- a/designer_v2/pubspec.yaml +++ b/designer_v2/pubspec.yaml @@ -6,7 +6,7 @@ homepage: https://studyu.health repository: https://github.com/hpi-studyu/studyu environment: - sdk: '>=2.17.0 <4.0.0' + sdk: '>=3.0.0 <4.0.0' dependencies: archive: ^3.4.9