diff --git a/patient/ios/Runner.xcworkspace/contents.xcworkspacedata b/patient/ios/Runner.xcworkspace/contents.xcworkspacedata
index 1d526a1..21a3cc1 100644
--- a/patient/ios/Runner.xcworkspace/contents.xcworkspacedata
+++ b/patient/ios/Runner.xcworkspace/contents.xcworkspacedata
@@ -4,4 +4,7 @@
+
+
diff --git a/patient/lib/core/core.dart b/patient/lib/core/core.dart
index 9b2c70c..a0a48e9 100644
--- a/patient/lib/core/core.dart
+++ b/patient/lib/core/core.dart
@@ -1,4 +1,5 @@
export './entities/entities.dart';
export './result/result.dart';
export './repository/repository.dart';
-export './core.dart';
\ No newline at end of file
+export './core.dart';
+export './utils/utils.dart';
\ No newline at end of file
diff --git a/patient/lib/core/entities/assessment_entities/assessment_answer_entity.dart b/patient/lib/core/entities/assessment_entities/assessment_answer_entity.dart
new file mode 100644
index 0000000..68a6310
--- /dev/null
+++ b/patient/lib/core/entities/assessment_entities/assessment_answer_entity.dart
@@ -0,0 +1,21 @@
+import 'package:dart_mappable/dart_mappable.dart';
+
+import 'assessment_question_answer_entity.dart';
+
+part 'assessment_answer_entity.mapper.dart';
+
+@MappableClass()
+class AssessmentAnswerEntity with AssessmentAnswerEntityMappable {
+
+ @MappableField(key: 'assessment_id')
+ final String assessmentId;
+
+ @MappableField(key: 'questions')
+ final List questions;
+
+ AssessmentAnswerEntity({
+ required this.assessmentId,
+ required this.questions,
+ });
+
+}
\ No newline at end of file
diff --git a/patient/lib/core/entities/assessment_entities/assessment_answer_entity.mapper.dart b/patient/lib/core/entities/assessment_entities/assessment_answer_entity.mapper.dart
new file mode 100644
index 0000000..a05718a
--- /dev/null
+++ b/patient/lib/core/entities/assessment_entities/assessment_answer_entity.mapper.dart
@@ -0,0 +1,150 @@
+// coverage:ignore-file
+// GENERATED CODE - DO NOT MODIFY BY HAND
+// ignore_for_file: type=lint
+// ignore_for_file: unused_element, unnecessary_cast, override_on_non_overriding_member
+// ignore_for_file: strict_raw_type, inference_failure_on_untyped_parameter
+
+part of 'assessment_answer_entity.dart';
+
+class AssessmentAnswerEntityMapper
+ extends ClassMapperBase {
+ AssessmentAnswerEntityMapper._();
+
+ static AssessmentAnswerEntityMapper? _instance;
+ static AssessmentAnswerEntityMapper ensureInitialized() {
+ if (_instance == null) {
+ MapperContainer.globals.use(_instance = AssessmentAnswerEntityMapper._());
+ AssessmentQuestionAnswerEntityMapper.ensureInitialized();
+ }
+ return _instance!;
+ }
+
+ @override
+ final String id = 'AssessmentAnswerEntity';
+
+ static String _$assessmentId(AssessmentAnswerEntity v) => v.assessmentId;
+ static const Field _f$assessmentId =
+ Field('assessmentId', _$assessmentId, key: r'assessment_id');
+ static List _$questions(
+ AssessmentAnswerEntity v) =>
+ v.questions;
+ static const Field> _f$questions =
+ Field('questions', _$questions);
+
+ @override
+ final MappableFields fields = const {
+ #assessmentId: _f$assessmentId,
+ #questions: _f$questions,
+ };
+
+ static AssessmentAnswerEntity _instantiate(DecodingData data) {
+ return AssessmentAnswerEntity(
+ assessmentId: data.dec(_f$assessmentId),
+ questions: data.dec(_f$questions));
+ }
+
+ @override
+ final Function instantiate = _instantiate;
+
+ static AssessmentAnswerEntity fromMap(Map map) {
+ return ensureInitialized().decodeMap(map);
+ }
+
+ static AssessmentAnswerEntity fromJson(String json) {
+ return ensureInitialized().decodeJson(json);
+ }
+}
+
+mixin AssessmentAnswerEntityMappable {
+ String toJson() {
+ return AssessmentAnswerEntityMapper.ensureInitialized()
+ .encodeJson(this as AssessmentAnswerEntity);
+ }
+
+ Map toMap() {
+ return AssessmentAnswerEntityMapper.ensureInitialized()
+ .encodeMap(this as AssessmentAnswerEntity);
+ }
+
+ AssessmentAnswerEntityCopyWith
+ get copyWith => _AssessmentAnswerEntityCopyWithImpl(
+ this as AssessmentAnswerEntity, $identity, $identity);
+ @override
+ String toString() {
+ return AssessmentAnswerEntityMapper.ensureInitialized()
+ .stringifyValue(this as AssessmentAnswerEntity);
+ }
+
+ @override
+ bool operator ==(Object other) {
+ return AssessmentAnswerEntityMapper.ensureInitialized()
+ .equalsValue(this as AssessmentAnswerEntity, other);
+ }
+
+ @override
+ int get hashCode {
+ return AssessmentAnswerEntityMapper.ensureInitialized()
+ .hashValue(this as AssessmentAnswerEntity);
+ }
+}
+
+extension AssessmentAnswerEntityValueCopy<$R, $Out>
+ on ObjectCopyWith<$R, AssessmentAnswerEntity, $Out> {
+ AssessmentAnswerEntityCopyWith<$R, AssessmentAnswerEntity, $Out>
+ get $asAssessmentAnswerEntity =>
+ $base.as((v, t, t2) => _AssessmentAnswerEntityCopyWithImpl(v, t, t2));
+}
+
+abstract class AssessmentAnswerEntityCopyWith<
+ $R,
+ $In extends AssessmentAnswerEntity,
+ $Out> implements ClassCopyWith<$R, $In, $Out> {
+ ListCopyWith<
+ $R,
+ AssessmentQuestionAnswerEntity,
+ AssessmentQuestionAnswerEntityCopyWith<$R, AssessmentQuestionAnswerEntity,
+ AssessmentQuestionAnswerEntity>> get questions;
+ $R call(
+ {String? assessmentId, List? questions});
+ AssessmentAnswerEntityCopyWith<$R2, $In, $Out2> $chain<$R2, $Out2>(
+ Then<$Out2, $R2> t);
+}
+
+class _AssessmentAnswerEntityCopyWithImpl<$R, $Out>
+ extends ClassCopyWithBase<$R, AssessmentAnswerEntity, $Out>
+ implements
+ AssessmentAnswerEntityCopyWith<$R, AssessmentAnswerEntity, $Out> {
+ _AssessmentAnswerEntityCopyWithImpl(super.value, super.then, super.then2);
+
+ @override
+ late final ClassMapperBase $mapper =
+ AssessmentAnswerEntityMapper.ensureInitialized();
+ @override
+ ListCopyWith<
+ $R,
+ AssessmentQuestionAnswerEntity,
+ AssessmentQuestionAnswerEntityCopyWith<$R, AssessmentQuestionAnswerEntity,
+ AssessmentQuestionAnswerEntity>> get questions => ListCopyWith(
+ $value.questions,
+ (v, t) => v.copyWith.$chain(t),
+ (v) => call(questions: v));
+ @override
+ $R call(
+ {String? assessmentId,
+ List? questions}) =>
+ $apply(FieldCopyWithData({
+ if (assessmentId != null) #assessmentId: assessmentId,
+ if (questions != null) #questions: questions
+ }));
+ @override
+ AssessmentAnswerEntity $make(CopyWithData data) => AssessmentAnswerEntity(
+ assessmentId: data.get(#assessmentId, or: $value.assessmentId),
+ questions: data.get(#questions, or: $value.questions));
+
+ @override
+ AssessmentAnswerEntityCopyWith<$R2, AssessmentAnswerEntity, $Out2>
+ $chain<$R2, $Out2>(Then<$Out2, $R2> t) =>
+ _AssessmentAnswerEntityCopyWithImpl($value, $cast, t);
+}
diff --git a/patient/lib/core/entities/assessment_entities/assessment_entities.dart b/patient/lib/core/entities/assessment_entities/assessment_entities.dart
new file mode 100644
index 0000000..7233435
--- /dev/null
+++ b/patient/lib/core/entities/assessment_entities/assessment_entities.dart
@@ -0,0 +1,7 @@
+export './assessment_entities.dart';
+export './assessment_result_entity.dart';
+export './assessment_answer_entity.dart';
+export './assessment_entity.dart';
+export './assessment_question_entity.dart';
+export './assessment_question_answer_entity.dart';
+export './assessment_option_entity.dart';
\ No newline at end of file
diff --git a/patient/lib/core/entities/assessment_entities/assessment_entity.dart b/patient/lib/core/entities/assessment_entities/assessment_entity.dart
new file mode 100644
index 0000000..1865830
--- /dev/null
+++ b/patient/lib/core/entities/assessment_entities/assessment_entity.dart
@@ -0,0 +1,59 @@
+
+import 'package:dart_mappable/dart_mappable.dart';
+import 'package:patient/core/entities/assessment_entities/assessment_question_entity.dart';
+import 'package:patient/model/assessment_models/assessment_models.dart';
+
+part 'assessment_entity.mapper.dart';
+
+@MappableClass()
+class AssessmentEntity with AssessmentEntityMappable {
+
+ @MappableField(key: 'id')
+ final String assessmentId;
+
+ @MappableField(key: 'created_at')
+ final String createdAt;
+
+ @MappableField(key: 'name')
+ final String name;
+
+ @MappableField(key: 'description')
+ final String description;
+
+ @MappableField(key: 'category')
+ final String category;
+
+ @MappableField(key: 'cutoff_score')
+ final int cutoffScore;
+
+ @MappableField(key: 'image_url')
+ final String imageUrl;
+
+ @MappableField(key: 'questions')
+ final List questions;
+
+ AssessmentEntity({
+ required this.assessmentId,
+ required this.createdAt,
+ required this.name,
+ required this.description,
+ required this.category,
+ required this.cutoffScore,
+ required this.imageUrl,
+ required this.questions,
+ });
+
+ AssessmentModel toModel() {
+ return AssessmentModel(
+ assessmentId: assessmentId,
+ createdAt: createdAt,
+ name: name,
+ description: description,
+ category: category,
+ cutoffScore: cutoffScore,
+ imageUrl: imageUrl,
+ questions: questions.map((e) => e.toModel()).toList(),
+ );
+ }
+
+}
\ No newline at end of file
diff --git a/patient/lib/core/entities/assessment_entities/assessment_entity.mapper.dart b/patient/lib/core/entities/assessment_entities/assessment_entity.mapper.dart
new file mode 100644
index 0000000..ffc15c1
--- /dev/null
+++ b/patient/lib/core/entities/assessment_entities/assessment_entity.mapper.dart
@@ -0,0 +1,197 @@
+// coverage:ignore-file
+// GENERATED CODE - DO NOT MODIFY BY HAND
+// ignore_for_file: type=lint
+// ignore_for_file: unused_element, unnecessary_cast, override_on_non_overriding_member
+// ignore_for_file: strict_raw_type, inference_failure_on_untyped_parameter
+
+part of 'assessment_entity.dart';
+
+class AssessmentEntityMapper extends ClassMapperBase {
+ AssessmentEntityMapper._();
+
+ static AssessmentEntityMapper? _instance;
+ static AssessmentEntityMapper ensureInitialized() {
+ if (_instance == null) {
+ MapperContainer.globals.use(_instance = AssessmentEntityMapper._());
+ AssessmentQuestionEntityMapper.ensureInitialized();
+ }
+ return _instance!;
+ }
+
+ @override
+ final String id = 'AssessmentEntity';
+
+ static String _$assessmentId(AssessmentEntity v) => v.assessmentId;
+ static const Field _f$assessmentId =
+ Field('assessmentId', _$assessmentId, key: r'id');
+ static String _$createdAt(AssessmentEntity v) => v.createdAt;
+ static const Field _f$createdAt =
+ Field('createdAt', _$createdAt, key: r'created_at');
+ static String _$name(AssessmentEntity v) => v.name;
+ static const Field _f$name = Field('name', _$name);
+ static String _$description(AssessmentEntity v) => v.description;
+ static const Field _f$description =
+ Field('description', _$description);
+ static String _$category(AssessmentEntity v) => v.category;
+ static const Field _f$category =
+ Field('category', _$category);
+ static int _$cutoffScore(AssessmentEntity v) => v.cutoffScore;
+ static const Field _f$cutoffScore =
+ Field('cutoffScore', _$cutoffScore, key: r'cutoff_score');
+ static String _$imageUrl(AssessmentEntity v) => v.imageUrl;
+ static const Field _f$imageUrl =
+ Field('imageUrl', _$imageUrl, key: r'image_url');
+ static List _$questions(AssessmentEntity v) =>
+ v.questions;
+ static const Field>
+ _f$questions = Field('questions', _$questions);
+
+ @override
+ final MappableFields fields = const {
+ #assessmentId: _f$assessmentId,
+ #createdAt: _f$createdAt,
+ #name: _f$name,
+ #description: _f$description,
+ #category: _f$category,
+ #cutoffScore: _f$cutoffScore,
+ #imageUrl: _f$imageUrl,
+ #questions: _f$questions,
+ };
+
+ static AssessmentEntity _instantiate(DecodingData data) {
+ return AssessmentEntity(
+ assessmentId: data.dec(_f$assessmentId),
+ createdAt: data.dec(_f$createdAt),
+ name: data.dec(_f$name),
+ description: data.dec(_f$description),
+ category: data.dec(_f$category),
+ cutoffScore: data.dec(_f$cutoffScore),
+ imageUrl: data.dec(_f$imageUrl),
+ questions: data.dec(_f$questions));
+ }
+
+ @override
+ final Function instantiate = _instantiate;
+
+ static AssessmentEntity fromMap(Map map) {
+ return ensureInitialized().decodeMap(map);
+ }
+
+ static AssessmentEntity fromJson(String json) {
+ return ensureInitialized().decodeJson(json);
+ }
+}
+
+mixin AssessmentEntityMappable {
+ String toJson() {
+ return AssessmentEntityMapper.ensureInitialized()
+ .encodeJson(this as AssessmentEntity);
+ }
+
+ Map toMap() {
+ return AssessmentEntityMapper.ensureInitialized()
+ .encodeMap(this as AssessmentEntity);
+ }
+
+ AssessmentEntityCopyWith
+ get copyWith => _AssessmentEntityCopyWithImpl(
+ this as AssessmentEntity, $identity, $identity);
+ @override
+ String toString() {
+ return AssessmentEntityMapper.ensureInitialized()
+ .stringifyValue(this as AssessmentEntity);
+ }
+
+ @override
+ bool operator ==(Object other) {
+ return AssessmentEntityMapper.ensureInitialized()
+ .equalsValue(this as AssessmentEntity, other);
+ }
+
+ @override
+ int get hashCode {
+ return AssessmentEntityMapper.ensureInitialized()
+ .hashValue(this as AssessmentEntity);
+ }
+}
+
+extension AssessmentEntityValueCopy<$R, $Out>
+ on ObjectCopyWith<$R, AssessmentEntity, $Out> {
+ AssessmentEntityCopyWith<$R, AssessmentEntity, $Out>
+ get $asAssessmentEntity =>
+ $base.as((v, t, t2) => _AssessmentEntityCopyWithImpl(v, t, t2));
+}
+
+abstract class AssessmentEntityCopyWith<$R, $In extends AssessmentEntity, $Out>
+ implements ClassCopyWith<$R, $In, $Out> {
+ ListCopyWith<
+ $R,
+ AssessmentQuestionEntity,
+ AssessmentQuestionEntityCopyWith<$R, AssessmentQuestionEntity,
+ AssessmentQuestionEntity>> get questions;
+ $R call(
+ {String? assessmentId,
+ String? createdAt,
+ String? name,
+ String? description,
+ String? category,
+ int? cutoffScore,
+ String? imageUrl,
+ List? questions});
+ AssessmentEntityCopyWith<$R2, $In, $Out2> $chain<$R2, $Out2>(
+ Then<$Out2, $R2> t);
+}
+
+class _AssessmentEntityCopyWithImpl<$R, $Out>
+ extends ClassCopyWithBase<$R, AssessmentEntity, $Out>
+ implements AssessmentEntityCopyWith<$R, AssessmentEntity, $Out> {
+ _AssessmentEntityCopyWithImpl(super.value, super.then, super.then2);
+
+ @override
+ late final ClassMapperBase $mapper =
+ AssessmentEntityMapper.ensureInitialized();
+ @override
+ ListCopyWith<
+ $R,
+ AssessmentQuestionEntity,
+ AssessmentQuestionEntityCopyWith<$R, AssessmentQuestionEntity,
+ AssessmentQuestionEntity>> get questions => ListCopyWith(
+ $value.questions,
+ (v, t) => v.copyWith.$chain(t),
+ (v) => call(questions: v));
+ @override
+ $R call(
+ {String? assessmentId,
+ String? createdAt,
+ String? name,
+ String? description,
+ String? category,
+ int? cutoffScore,
+ String? imageUrl,
+ List? questions}) =>
+ $apply(FieldCopyWithData({
+ if (assessmentId != null) #assessmentId: assessmentId,
+ if (createdAt != null) #createdAt: createdAt,
+ if (name != null) #name: name,
+ if (description != null) #description: description,
+ if (category != null) #category: category,
+ if (cutoffScore != null) #cutoffScore: cutoffScore,
+ if (imageUrl != null) #imageUrl: imageUrl,
+ if (questions != null) #questions: questions
+ }));
+ @override
+ AssessmentEntity $make(CopyWithData data) => AssessmentEntity(
+ assessmentId: data.get(#assessmentId, or: $value.assessmentId),
+ createdAt: data.get(#createdAt, or: $value.createdAt),
+ name: data.get(#name, or: $value.name),
+ description: data.get(#description, or: $value.description),
+ category: data.get(#category, or: $value.category),
+ cutoffScore: data.get(#cutoffScore, or: $value.cutoffScore),
+ imageUrl: data.get(#imageUrl, or: $value.imageUrl),
+ questions: data.get(#questions, or: $value.questions));
+
+ @override
+ AssessmentEntityCopyWith<$R2, AssessmentEntity, $Out2> $chain<$R2, $Out2>(
+ Then<$Out2, $R2> t) =>
+ _AssessmentEntityCopyWithImpl($value, $cast, t);
+}
diff --git a/patient/lib/core/entities/assessment_entities/assessment_option_entity.dart b/patient/lib/core/entities/assessment_entities/assessment_option_entity.dart
new file mode 100644
index 0000000..48e2a04
--- /dev/null
+++ b/patient/lib/core/entities/assessment_entities/assessment_option_entity.dart
@@ -0,0 +1,32 @@
+import 'package:dart_mappable/dart_mappable.dart';
+import 'package:patient/model/assessment_models/assessment_models.dart';
+
+part 'assessment_option_entity.mapper.dart';
+
+@MappableClass()
+class AssessmentOptionEntity with AssessmentOptionEntityMappable {
+
+ @MappableField(key: 'option_id')
+ final String optionId;
+
+ @MappableField(key: 'text')
+ final String text;
+
+ @MappableField(key: 'score')
+ final int score;
+
+ AssessmentOptionEntity({
+ required this.optionId,
+ required this.text,
+ required this.score,
+ });
+
+ AssessmentOptionModel toModel() {
+ return AssessmentOptionModel(
+ optionId: optionId,
+ text: text,
+ score: score,
+ );
+ }
+
+}
\ No newline at end of file
diff --git a/patient/lib/core/entities/assessment_entities/assessment_option_entity.mapper.dart b/patient/lib/core/entities/assessment_entities/assessment_option_entity.mapper.dart
new file mode 100644
index 0000000..2018a45
--- /dev/null
+++ b/patient/lib/core/entities/assessment_entities/assessment_option_entity.mapper.dart
@@ -0,0 +1,136 @@
+// coverage:ignore-file
+// GENERATED CODE - DO NOT MODIFY BY HAND
+// ignore_for_file: type=lint
+// ignore_for_file: unused_element, unnecessary_cast, override_on_non_overriding_member
+// ignore_for_file: strict_raw_type, inference_failure_on_untyped_parameter
+
+part of 'assessment_option_entity.dart';
+
+class AssessmentOptionEntityMapper
+ extends ClassMapperBase {
+ AssessmentOptionEntityMapper._();
+
+ static AssessmentOptionEntityMapper? _instance;
+ static AssessmentOptionEntityMapper ensureInitialized() {
+ if (_instance == null) {
+ MapperContainer.globals.use(_instance = AssessmentOptionEntityMapper._());
+ }
+ return _instance!;
+ }
+
+ @override
+ final String id = 'AssessmentOptionEntity';
+
+ static String _$optionId(AssessmentOptionEntity v) => v.optionId;
+ static const Field _f$optionId =
+ Field('optionId', _$optionId, key: r'option_id');
+ static String _$text(AssessmentOptionEntity v) => v.text;
+ static const Field _f$text =
+ Field('text', _$text);
+ static int _$score(AssessmentOptionEntity v) => v.score;
+ static const Field _f$score =
+ Field('score', _$score);
+
+ @override
+ final MappableFields fields = const {
+ #optionId: _f$optionId,
+ #text: _f$text,
+ #score: _f$score,
+ };
+
+ static AssessmentOptionEntity _instantiate(DecodingData data) {
+ return AssessmentOptionEntity(
+ optionId: data.dec(_f$optionId),
+ text: data.dec(_f$text),
+ score: data.dec(_f$score));
+ }
+
+ @override
+ final Function instantiate = _instantiate;
+
+ static AssessmentOptionEntity fromMap(Map map) {
+ return ensureInitialized().decodeMap(map);
+ }
+
+ static AssessmentOptionEntity fromJson(String json) {
+ return ensureInitialized().decodeJson(json);
+ }
+}
+
+mixin AssessmentOptionEntityMappable {
+ String toJson() {
+ return AssessmentOptionEntityMapper.ensureInitialized()
+ .encodeJson(this as AssessmentOptionEntity);
+ }
+
+ Map toMap() {
+ return AssessmentOptionEntityMapper.ensureInitialized()
+ .encodeMap(this as AssessmentOptionEntity);
+ }
+
+ AssessmentOptionEntityCopyWith
+ get copyWith => _AssessmentOptionEntityCopyWithImpl(
+ this as AssessmentOptionEntity, $identity, $identity);
+ @override
+ String toString() {
+ return AssessmentOptionEntityMapper.ensureInitialized()
+ .stringifyValue(this as AssessmentOptionEntity);
+ }
+
+ @override
+ bool operator ==(Object other) {
+ return AssessmentOptionEntityMapper.ensureInitialized()
+ .equalsValue(this as AssessmentOptionEntity, other);
+ }
+
+ @override
+ int get hashCode {
+ return AssessmentOptionEntityMapper.ensureInitialized()
+ .hashValue(this as AssessmentOptionEntity);
+ }
+}
+
+extension AssessmentOptionEntityValueCopy<$R, $Out>
+ on ObjectCopyWith<$R, AssessmentOptionEntity, $Out> {
+ AssessmentOptionEntityCopyWith<$R, AssessmentOptionEntity, $Out>
+ get $asAssessmentOptionEntity =>
+ $base.as((v, t, t2) => _AssessmentOptionEntityCopyWithImpl(v, t, t2));
+}
+
+abstract class AssessmentOptionEntityCopyWith<
+ $R,
+ $In extends AssessmentOptionEntity,
+ $Out> implements ClassCopyWith<$R, $In, $Out> {
+ $R call({String? optionId, String? text, int? score});
+ AssessmentOptionEntityCopyWith<$R2, $In, $Out2> $chain<$R2, $Out2>(
+ Then<$Out2, $R2> t);
+}
+
+class _AssessmentOptionEntityCopyWithImpl<$R, $Out>
+ extends ClassCopyWithBase<$R, AssessmentOptionEntity, $Out>
+ implements
+ AssessmentOptionEntityCopyWith<$R, AssessmentOptionEntity, $Out> {
+ _AssessmentOptionEntityCopyWithImpl(super.value, super.then, super.then2);
+
+ @override
+ late final ClassMapperBase $mapper =
+ AssessmentOptionEntityMapper.ensureInitialized();
+ @override
+ $R call({String? optionId, String? text, int? score}) =>
+ $apply(FieldCopyWithData({
+ if (optionId != null) #optionId: optionId,
+ if (text != null) #text: text,
+ if (score != null) #score: score
+ }));
+ @override
+ AssessmentOptionEntity $make(CopyWithData data) => AssessmentOptionEntity(
+ optionId: data.get(#optionId, or: $value.optionId),
+ text: data.get(#text, or: $value.text),
+ score: data.get(#score, or: $value.score));
+
+ @override
+ AssessmentOptionEntityCopyWith<$R2, AssessmentOptionEntity, $Out2>
+ $chain<$R2, $Out2>(Then<$Out2, $R2> t) =>
+ _AssessmentOptionEntityCopyWithImpl($value, $cast, t);
+}
diff --git a/patient/lib/core/entities/assessment_entities/assessment_question_answer_entity.dart b/patient/lib/core/entities/assessment_entities/assessment_question_answer_entity.dart
new file mode 100644
index 0000000..1985ab4
--- /dev/null
+++ b/patient/lib/core/entities/assessment_entities/assessment_question_answer_entity.dart
@@ -0,0 +1,18 @@
+import 'package:dart_mappable/dart_mappable.dart';
+
+part 'assessment_question_answer_entity.mapper.dart';
+
+@MappableClass()
+class AssessmentQuestionAnswerEntity with AssessmentQuestionAnswerEntityMappable {
+
+ @MappableField(key: 'question_id')
+ final String questionId;
+
+ @MappableField(key: 'answer_id')
+ final String answerId;
+
+ AssessmentQuestionAnswerEntity({
+ required this.questionId,
+ required this.answerId,
+ });
+}
\ No newline at end of file
diff --git a/patient/lib/core/entities/assessment_entities/assessment_question_answer_entity.mapper.dart b/patient/lib/core/entities/assessment_entities/assessment_question_answer_entity.mapper.dart
new file mode 100644
index 0000000..e46233b
--- /dev/null
+++ b/patient/lib/core/entities/assessment_entities/assessment_question_answer_entity.mapper.dart
@@ -0,0 +1,135 @@
+// coverage:ignore-file
+// GENERATED CODE - DO NOT MODIFY BY HAND
+// ignore_for_file: type=lint
+// ignore_for_file: unused_element, unnecessary_cast, override_on_non_overriding_member
+// ignore_for_file: strict_raw_type, inference_failure_on_untyped_parameter
+
+part of 'assessment_question_answer_entity.dart';
+
+class AssessmentQuestionAnswerEntityMapper
+ extends ClassMapperBase {
+ AssessmentQuestionAnswerEntityMapper._();
+
+ static AssessmentQuestionAnswerEntityMapper? _instance;
+ static AssessmentQuestionAnswerEntityMapper ensureInitialized() {
+ if (_instance == null) {
+ MapperContainer.globals
+ .use(_instance = AssessmentQuestionAnswerEntityMapper._());
+ }
+ return _instance!;
+ }
+
+ @override
+ final String id = 'AssessmentQuestionAnswerEntity';
+
+ static String _$questionId(AssessmentQuestionAnswerEntity v) => v.questionId;
+ static const Field _f$questionId =
+ Field('questionId', _$questionId, key: r'question_id');
+ static String _$answerId(AssessmentQuestionAnswerEntity v) => v.answerId;
+ static const Field _f$answerId =
+ Field('answerId', _$answerId, key: r'answer_id');
+
+ @override
+ final MappableFields fields = const {
+ #questionId: _f$questionId,
+ #answerId: _f$answerId,
+ };
+
+ static AssessmentQuestionAnswerEntity _instantiate(DecodingData data) {
+ return AssessmentQuestionAnswerEntity(
+ questionId: data.dec(_f$questionId), answerId: data.dec(_f$answerId));
+ }
+
+ @override
+ final Function instantiate = _instantiate;
+
+ static AssessmentQuestionAnswerEntity fromMap(Map map) {
+ return ensureInitialized().decodeMap(map);
+ }
+
+ static AssessmentQuestionAnswerEntity fromJson(String json) {
+ return ensureInitialized().decodeJson(json);
+ }
+}
+
+mixin AssessmentQuestionAnswerEntityMappable {
+ String toJson() {
+ return AssessmentQuestionAnswerEntityMapper.ensureInitialized()
+ .encodeJson(
+ this as AssessmentQuestionAnswerEntity);
+ }
+
+ Map toMap() {
+ return AssessmentQuestionAnswerEntityMapper.ensureInitialized()
+ .encodeMap(
+ this as AssessmentQuestionAnswerEntity);
+ }
+
+ AssessmentQuestionAnswerEntityCopyWith
+ get copyWith => _AssessmentQuestionAnswerEntityCopyWithImpl(
+ this as AssessmentQuestionAnswerEntity, $identity, $identity);
+ @override
+ String toString() {
+ return AssessmentQuestionAnswerEntityMapper.ensureInitialized()
+ .stringifyValue(this as AssessmentQuestionAnswerEntity);
+ }
+
+ @override
+ bool operator ==(Object other) {
+ return AssessmentQuestionAnswerEntityMapper.ensureInitialized()
+ .equalsValue(this as AssessmentQuestionAnswerEntity, other);
+ }
+
+ @override
+ int get hashCode {
+ return AssessmentQuestionAnswerEntityMapper.ensureInitialized()
+ .hashValue(this as AssessmentQuestionAnswerEntity);
+ }
+}
+
+extension AssessmentQuestionAnswerEntityValueCopy<$R, $Out>
+ on ObjectCopyWith<$R, AssessmentQuestionAnswerEntity, $Out> {
+ AssessmentQuestionAnswerEntityCopyWith<$R, AssessmentQuestionAnswerEntity,
+ $Out>
+ get $asAssessmentQuestionAnswerEntity => $base.as(
+ (v, t, t2) => _AssessmentQuestionAnswerEntityCopyWithImpl(v, t, t2));
+}
+
+abstract class AssessmentQuestionAnswerEntityCopyWith<
+ $R,
+ $In extends AssessmentQuestionAnswerEntity,
+ $Out> implements ClassCopyWith<$R, $In, $Out> {
+ $R call({String? questionId, String? answerId});
+ AssessmentQuestionAnswerEntityCopyWith<$R2, $In, $Out2> $chain<$R2, $Out2>(
+ Then<$Out2, $R2> t);
+}
+
+class _AssessmentQuestionAnswerEntityCopyWithImpl<$R, $Out>
+ extends ClassCopyWithBase<$R, AssessmentQuestionAnswerEntity, $Out>
+ implements
+ AssessmentQuestionAnswerEntityCopyWith<$R,
+ AssessmentQuestionAnswerEntity, $Out> {
+ _AssessmentQuestionAnswerEntityCopyWithImpl(
+ super.value, super.then, super.then2);
+
+ @override
+ late final ClassMapperBase $mapper =
+ AssessmentQuestionAnswerEntityMapper.ensureInitialized();
+ @override
+ $R call({String? questionId, String? answerId}) => $apply(FieldCopyWithData({
+ if (questionId != null) #questionId: questionId,
+ if (answerId != null) #answerId: answerId
+ }));
+ @override
+ AssessmentQuestionAnswerEntity $make(CopyWithData data) =>
+ AssessmentQuestionAnswerEntity(
+ questionId: data.get(#questionId, or: $value.questionId),
+ answerId: data.get(#answerId, or: $value.answerId));
+
+ @override
+ AssessmentQuestionAnswerEntityCopyWith<$R2, AssessmentQuestionAnswerEntity,
+ $Out2> $chain<$R2, $Out2>(
+ Then<$Out2, $R2> t) =>
+ _AssessmentQuestionAnswerEntityCopyWithImpl($value, $cast, t);
+}
diff --git a/patient/lib/core/entities/assessment_entities/assessment_question_entity.dart b/patient/lib/core/entities/assessment_entities/assessment_question_entity.dart
new file mode 100644
index 0000000..f418e6b
--- /dev/null
+++ b/patient/lib/core/entities/assessment_entities/assessment_question_entity.dart
@@ -0,0 +1,33 @@
+import 'package:dart_mappable/dart_mappable.dart';
+import 'package:patient/core/entities/assessment_entities/assessment_option_entity.dart';
+import 'package:patient/model/assessment_models/assessment_models.dart';
+
+part 'assessment_question_entity.mapper.dart';
+
+@MappableClass()
+class AssessmentQuestionEntity with AssessmentQuestionEntityMappable {
+
+ @MappableField(key: 'question_id')
+ final String questionId;
+
+ @MappableField(key: 'text')
+ final String text;
+
+ @MappableField(key: 'options')
+ final List options;
+
+ AssessmentQuestionEntity({
+ required this.questionId,
+ required this.text,
+ required this.options,
+ });
+
+ AssessmentQuestionModel toModel() {
+ return AssessmentQuestionModel(
+ questionId: questionId,
+ text: text,
+ options: options.map((e) => e.toModel()).toList(),
+ );
+ }
+
+}
\ No newline at end of file
diff --git a/patient/lib/core/entities/assessment_entities/assessment_question_entity.mapper.dart b/patient/lib/core/entities/assessment_entities/assessment_question_entity.mapper.dart
new file mode 100644
index 0000000..5553f45
--- /dev/null
+++ b/patient/lib/core/entities/assessment_entities/assessment_question_entity.mapper.dart
@@ -0,0 +1,157 @@
+// coverage:ignore-file
+// GENERATED CODE - DO NOT MODIFY BY HAND
+// ignore_for_file: type=lint
+// ignore_for_file: unused_element, unnecessary_cast, override_on_non_overriding_member
+// ignore_for_file: strict_raw_type, inference_failure_on_untyped_parameter
+
+part of 'assessment_question_entity.dart';
+
+class AssessmentQuestionEntityMapper
+ extends ClassMapperBase {
+ AssessmentQuestionEntityMapper._();
+
+ static AssessmentQuestionEntityMapper? _instance;
+ static AssessmentQuestionEntityMapper ensureInitialized() {
+ if (_instance == null) {
+ MapperContainer.globals
+ .use(_instance = AssessmentQuestionEntityMapper._());
+ AssessmentOptionEntityMapper.ensureInitialized();
+ }
+ return _instance!;
+ }
+
+ @override
+ final String id = 'AssessmentQuestionEntity';
+
+ static String _$questionId(AssessmentQuestionEntity v) => v.questionId;
+ static const Field _f$questionId =
+ Field('questionId', _$questionId, key: r'question_id');
+ static String _$text(AssessmentQuestionEntity v) => v.text;
+ static const Field _f$text =
+ Field('text', _$text);
+ static List _$options(AssessmentQuestionEntity v) =>
+ v.options;
+ static const Field>
+ _f$options = Field('options', _$options);
+
+ @override
+ final MappableFields fields = const {
+ #questionId: _f$questionId,
+ #text: _f$text,
+ #options: _f$options,
+ };
+
+ static AssessmentQuestionEntity _instantiate(DecodingData data) {
+ return AssessmentQuestionEntity(
+ questionId: data.dec(_f$questionId),
+ text: data.dec(_f$text),
+ options: data.dec(_f$options));
+ }
+
+ @override
+ final Function instantiate = _instantiate;
+
+ static AssessmentQuestionEntity fromMap(Map map) {
+ return ensureInitialized().decodeMap(map);
+ }
+
+ static AssessmentQuestionEntity fromJson(String json) {
+ return ensureInitialized().decodeJson(json);
+ }
+}
+
+mixin AssessmentQuestionEntityMappable {
+ String toJson() {
+ return AssessmentQuestionEntityMapper.ensureInitialized()
+ .encodeJson(this as AssessmentQuestionEntity);
+ }
+
+ Map toMap() {
+ return AssessmentQuestionEntityMapper.ensureInitialized()
+ .encodeMap(this as AssessmentQuestionEntity);
+ }
+
+ AssessmentQuestionEntityCopyWith
+ get copyWith => _AssessmentQuestionEntityCopyWithImpl(
+ this as AssessmentQuestionEntity, $identity, $identity);
+ @override
+ String toString() {
+ return AssessmentQuestionEntityMapper.ensureInitialized()
+ .stringifyValue(this as AssessmentQuestionEntity);
+ }
+
+ @override
+ bool operator ==(Object other) {
+ return AssessmentQuestionEntityMapper.ensureInitialized()
+ .equalsValue(this as AssessmentQuestionEntity, other);
+ }
+
+ @override
+ int get hashCode {
+ return AssessmentQuestionEntityMapper.ensureInitialized()
+ .hashValue(this as AssessmentQuestionEntity);
+ }
+}
+
+extension AssessmentQuestionEntityValueCopy<$R, $Out>
+ on ObjectCopyWith<$R, AssessmentQuestionEntity, $Out> {
+ AssessmentQuestionEntityCopyWith<$R, AssessmentQuestionEntity, $Out>
+ get $asAssessmentQuestionEntity => $base
+ .as((v, t, t2) => _AssessmentQuestionEntityCopyWithImpl(v, t, t2));
+}
+
+abstract class AssessmentQuestionEntityCopyWith<
+ $R,
+ $In extends AssessmentQuestionEntity,
+ $Out> implements ClassCopyWith<$R, $In, $Out> {
+ ListCopyWith<
+ $R,
+ AssessmentOptionEntity,
+ AssessmentOptionEntityCopyWith<$R, AssessmentOptionEntity,
+ AssessmentOptionEntity>> get options;
+ $R call(
+ {String? questionId,
+ String? text,
+ List? options});
+ AssessmentQuestionEntityCopyWith<$R2, $In, $Out2> $chain<$R2, $Out2>(
+ Then<$Out2, $R2> t);
+}
+
+class _AssessmentQuestionEntityCopyWithImpl<$R, $Out>
+ extends ClassCopyWithBase<$R, AssessmentQuestionEntity, $Out>
+ implements
+ AssessmentQuestionEntityCopyWith<$R, AssessmentQuestionEntity, $Out> {
+ _AssessmentQuestionEntityCopyWithImpl(super.value, super.then, super.then2);
+
+ @override
+ late final ClassMapperBase $mapper =
+ AssessmentQuestionEntityMapper.ensureInitialized();
+ @override
+ ListCopyWith<
+ $R,
+ AssessmentOptionEntity,
+ AssessmentOptionEntityCopyWith<$R, AssessmentOptionEntity,
+ AssessmentOptionEntity>> get options => ListCopyWith(
+ $value.options, (v, t) => v.copyWith.$chain(t), (v) => call(options: v));
+ @override
+ $R call(
+ {String? questionId,
+ String? text,
+ List? options}) =>
+ $apply(FieldCopyWithData({
+ if (questionId != null) #questionId: questionId,
+ if (text != null) #text: text,
+ if (options != null) #options: options
+ }));
+ @override
+ AssessmentQuestionEntity $make(CopyWithData data) => AssessmentQuestionEntity(
+ questionId: data.get(#questionId, or: $value.questionId),
+ text: data.get(#text, or: $value.text),
+ options: data.get(#options, or: $value.options));
+
+ @override
+ AssessmentQuestionEntityCopyWith<$R2, AssessmentQuestionEntity, $Out2>
+ $chain<$R2, $Out2>(Then<$Out2, $R2> t) =>
+ _AssessmentQuestionEntityCopyWithImpl($value, $cast, t);
+}
diff --git a/patient/lib/core/entities/assessment_entities/assessment_result_entity.dart b/patient/lib/core/entities/assessment_entities/assessment_result_entity.dart
new file mode 100644
index 0000000..522fe3f
--- /dev/null
+++ b/patient/lib/core/entities/assessment_entities/assessment_result_entity.dart
@@ -0,0 +1,33 @@
+import 'package:dart_mappable/dart_mappable.dart';
+import 'package:patient/model/assessment_models/assessment_result_model.dart';
+
+part 'assessment_result_entity.mapper.dart';
+
+@MappableClass()
+class AssessmentResultEntity with AssessmentResultEntityMappable {
+
+ @MappableField(key: 'assessment_score')
+ final int assessmentScore;
+
+ @MappableField(key: 'is_autistic')
+ final bool isAutistic;
+
+ @MappableField(key: 'message')
+ final String message;
+
+ AssessmentResultEntity({
+ required this.assessmentScore,
+ required this.isAutistic,
+ required this.message,
+ });
+
+
+ AssessmentResultModel toModel() {
+ return AssessmentResultModel(
+ assessmentScore: assessmentScore,
+ isAutistic: isAutistic,
+ message: message,
+ );
+ }
+
+}
\ No newline at end of file
diff --git a/patient/lib/core/entities/assessment_entities/assessment_result_entity.mapper.dart b/patient/lib/core/entities/assessment_entities/assessment_result_entity.mapper.dart
new file mode 100644
index 0000000..fceef2d
--- /dev/null
+++ b/patient/lib/core/entities/assessment_entities/assessment_result_entity.mapper.dart
@@ -0,0 +1,136 @@
+// coverage:ignore-file
+// GENERATED CODE - DO NOT MODIFY BY HAND
+// ignore_for_file: type=lint
+// ignore_for_file: unused_element, unnecessary_cast, override_on_non_overriding_member
+// ignore_for_file: strict_raw_type, inference_failure_on_untyped_parameter
+
+part of 'assessment_result_entity.dart';
+
+class AssessmentResultEntityMapper
+ extends ClassMapperBase {
+ AssessmentResultEntityMapper._();
+
+ static AssessmentResultEntityMapper? _instance;
+ static AssessmentResultEntityMapper ensureInitialized() {
+ if (_instance == null) {
+ MapperContainer.globals.use(_instance = AssessmentResultEntityMapper._());
+ }
+ return _instance!;
+ }
+
+ @override
+ final String id = 'AssessmentResultEntity';
+
+ static int _$assessmentScore(AssessmentResultEntity v) => v.assessmentScore;
+ static const Field _f$assessmentScore =
+ Field('assessmentScore', _$assessmentScore, key: r'assessment_score');
+ static bool _$isAutistic(AssessmentResultEntity v) => v.isAutistic;
+ static const Field _f$isAutistic =
+ Field('isAutistic', _$isAutistic, key: r'is_autistic');
+ static String _$message(AssessmentResultEntity v) => v.message;
+ static const Field _f$message =
+ Field('message', _$message);
+
+ @override
+ final MappableFields fields = const {
+ #assessmentScore: _f$assessmentScore,
+ #isAutistic: _f$isAutistic,
+ #message: _f$message,
+ };
+
+ static AssessmentResultEntity _instantiate(DecodingData data) {
+ return AssessmentResultEntity(
+ assessmentScore: data.dec(_f$assessmentScore),
+ isAutistic: data.dec(_f$isAutistic),
+ message: data.dec(_f$message));
+ }
+
+ @override
+ final Function instantiate = _instantiate;
+
+ static AssessmentResultEntity fromMap(Map map) {
+ return ensureInitialized().decodeMap(map);
+ }
+
+ static AssessmentResultEntity fromJson(String json) {
+ return ensureInitialized().decodeJson(json);
+ }
+}
+
+mixin AssessmentResultEntityMappable {
+ String toJson() {
+ return AssessmentResultEntityMapper.ensureInitialized()
+ .encodeJson(this as AssessmentResultEntity);
+ }
+
+ Map toMap() {
+ return AssessmentResultEntityMapper.ensureInitialized()
+ .encodeMap(this as AssessmentResultEntity);
+ }
+
+ AssessmentResultEntityCopyWith
+ get copyWith => _AssessmentResultEntityCopyWithImpl(
+ this as AssessmentResultEntity, $identity, $identity);
+ @override
+ String toString() {
+ return AssessmentResultEntityMapper.ensureInitialized()
+ .stringifyValue(this as AssessmentResultEntity);
+ }
+
+ @override
+ bool operator ==(Object other) {
+ return AssessmentResultEntityMapper.ensureInitialized()
+ .equalsValue(this as AssessmentResultEntity, other);
+ }
+
+ @override
+ int get hashCode {
+ return AssessmentResultEntityMapper.ensureInitialized()
+ .hashValue(this as AssessmentResultEntity);
+ }
+}
+
+extension AssessmentResultEntityValueCopy<$R, $Out>
+ on ObjectCopyWith<$R, AssessmentResultEntity, $Out> {
+ AssessmentResultEntityCopyWith<$R, AssessmentResultEntity, $Out>
+ get $asAssessmentResultEntity =>
+ $base.as((v, t, t2) => _AssessmentResultEntityCopyWithImpl(v, t, t2));
+}
+
+abstract class AssessmentResultEntityCopyWith<
+ $R,
+ $In extends AssessmentResultEntity,
+ $Out> implements ClassCopyWith<$R, $In, $Out> {
+ $R call({int? assessmentScore, bool? isAutistic, String? message});
+ AssessmentResultEntityCopyWith<$R2, $In, $Out2> $chain<$R2, $Out2>(
+ Then<$Out2, $R2> t);
+}
+
+class _AssessmentResultEntityCopyWithImpl<$R, $Out>
+ extends ClassCopyWithBase<$R, AssessmentResultEntity, $Out>
+ implements
+ AssessmentResultEntityCopyWith<$R, AssessmentResultEntity, $Out> {
+ _AssessmentResultEntityCopyWithImpl(super.value, super.then, super.then2);
+
+ @override
+ late final ClassMapperBase $mapper =
+ AssessmentResultEntityMapper.ensureInitialized();
+ @override
+ $R call({int? assessmentScore, bool? isAutistic, String? message}) =>
+ $apply(FieldCopyWithData({
+ if (assessmentScore != null) #assessmentScore: assessmentScore,
+ if (isAutistic != null) #isAutistic: isAutistic,
+ if (message != null) #message: message
+ }));
+ @override
+ AssessmentResultEntity $make(CopyWithData data) => AssessmentResultEntity(
+ assessmentScore: data.get(#assessmentScore, or: $value.assessmentScore),
+ isAutistic: data.get(#isAutistic, or: $value.isAutistic),
+ message: data.get(#message, or: $value.message));
+
+ @override
+ AssessmentResultEntityCopyWith<$R2, AssessmentResultEntity, $Out2>
+ $chain<$R2, $Out2>(Then<$Out2, $R2> t) =>
+ _AssessmentResultEntityCopyWithImpl($value, $cast, t);
+}
diff --git a/patient/lib/core/entities/auth_entities/personal_info_entity.dart b/patient/lib/core/entities/auth_entities/personal_info_entity.dart
index 56af823..1d7e88a 100644
--- a/patient/lib/core/entities/auth_entities/personal_info_entity.dart
+++ b/patient/lib/core/entities/auth_entities/personal_info_entity.dart
@@ -1,6 +1,7 @@
import 'package:dart_mappable/dart_mappable.dart';
+import 'package:patient/model/auth_models/personal_info_model.dart';
part 'personal_info_entity.mapper.dart';
@@ -53,4 +54,20 @@ class PersonalInfoEntity with PersonalInfoEntityMappable {
this.country,
this.gender,
});
+
+ PersonalInfoModel toModel() {
+ return PersonalInfoModel(
+ patientId: patientId,
+ patientName: patientName,
+ age: age,
+ isAdult: isAdult,
+ phoneNo: phoneNo,
+ email: email,
+ guardianName: guardianName ?? '',
+ guardianRelation: guardianRelation ?? '',
+ country: country ?? '',
+ gender: gender ?? '',
+ );
+ }
+
}
\ No newline at end of file
diff --git a/patient/lib/core/entities/entities.dart b/patient/lib/core/entities/entities.dart
index 4dca940..36ad623 100644
--- a/patient/lib/core/entities/entities.dart
+++ b/patient/lib/core/entities/entities.dart
@@ -1,2 +1,4 @@
export 'auth_entities/auth_entities.dart';
-export 'patient_entities/patient_entities.dart';
\ No newline at end of file
+export 'patient_entities/patient_entities.dart';
+export 'assessment_entities/assessment_entities.dart';
+export './entities.dart';
\ No newline at end of file
diff --git a/patient/lib/core/entities/patient_entities/patient_schedule_appointment_entity.mapper.dart b/patient/lib/core/entities/patient_entities/patient_schedule_appointment_entity.mapper.dart
index 7a583d7..c026971 100644
--- a/patient/lib/core/entities/patient_entities/patient_schedule_appointment_entity.mapper.dart
+++ b/patient/lib/core/entities/patient_entities/patient_schedule_appointment_entity.mapper.dart
@@ -35,7 +35,7 @@ class PatientScheduleAppointmentEntityMapper
Field('therapistId', _$therapistId, key: r'therapist_id');
static int _$mode(PatientScheduleAppointmentEntity v) => v.mode;
static const Field _f$mode =
- Field('mode', _$mode, key: r'model');
+ Field('mode', _$mode);
static int _$duration(PatientScheduleAppointmentEntity v) => v.duration;
static const Field _f$duration =
Field('duration', _$duration);
diff --git a/patient/lib/core/repository/assessment_repository.dart b/patient/lib/core/repository/assessment_repository.dart
index e91a40e..ea5f226 100644
--- a/patient/lib/core/repository/assessment_repository.dart
+++ b/patient/lib/core/repository/assessment_repository.dart
@@ -1,5 +1,10 @@
+import 'package:patient/core/entities/assessment_entities/assessment_answer_entity.dart';
+import 'package:patient/core/result/action_result.dart';
+
abstract interface class AssessmentsRepository {
// The abstract repository class will define the methods that the repository must implement.
Future>> fetchAssessmentById(String id);
- Future submitAssessment(Map assessment);
+ Future submitAssessment(AssessmentAnswerEntity answers);
+
+ Future fetchAllAssessments();
}
diff --git a/patient/lib/core/repository/auth/auth_repository.dart b/patient/lib/core/repository/auth/auth_repository.dart
index cf4b7af..101cfb9 100644
--- a/patient/lib/core/repository/auth/auth_repository.dart
+++ b/patient/lib/core/repository/auth/auth_repository.dart
@@ -26,4 +26,22 @@ abstract interface class AuthRepository {
/// - If an error occurs while inserting the record, it is caught and returned as a failure.
Future storePersonalInfo(PersonalInfoEntity personalInfoEntity);
+
+ /// Checks if the patient already exists in the `patient` table.
+ ///
+ /// This method checks if the patient already exists in the `patient` table
+ /// using the `patient_id` from the [PersonalInfoEntity].
+ ///
+ /// - **Returns:**
+ /// - A [Future] of [ActionResult], which can either be:
+ /// - [ActionResultSuccess] with a success message and status code `200` if the patient
+ /// exists in the `patient` table.
+ /// - [ActionResultFailure] with an error message and status code `400` if the patient
+ /// does not exist in the `patient` table.
+ ///
+ /// - **Exceptions:**
+ /// - If an error occurs while checking if the patient exists, it is caught and returned as a failure.
+
+ Future checkIfPatientExists();
+
}
diff --git a/patient/lib/core/utils/api_status_enum.dart b/patient/lib/core/utils/api_status_enum.dart
new file mode 100644
index 0000000..ff096f3
--- /dev/null
+++ b/patient/lib/core/utils/api_status_enum.dart
@@ -0,0 +1,13 @@
+enum ApiStatus {
+ initial,
+ loading,
+ success,
+ failure,
+}
+
+extension ApiStatusX on ApiStatus {
+ bool get isInitial => this == ApiStatus.initial;
+ bool get isLoading => this == ApiStatus.loading;
+ bool get isSuccess => this == ApiStatus.success;
+ bool get isFailure => this == ApiStatus.failure;
+}
diff --git a/patient/lib/core/utils/utils.dart b/patient/lib/core/utils/utils.dart
new file mode 100644
index 0000000..7b288c8
--- /dev/null
+++ b/patient/lib/core/utils/utils.dart
@@ -0,0 +1,2 @@
+export './utils.dart';
+export './api_status_enum.dart';
\ No newline at end of file
diff --git a/patient/lib/main.dart b/patient/lib/main.dart
index 82d99b1..ad0162c 100644
--- a/patient/lib/main.dart
+++ b/patient/lib/main.dart
@@ -4,8 +4,10 @@ import 'package:flutter_dotenv/flutter_dotenv.dart';
import 'package:patient/core/theme/theme.dart';
import 'package:patient/presentation/splash_screen.dart';
+import 'package:patient/presentation/widgets/snackbar_service.dart';
import 'package:patient/provider/assessment_provider.dart';
import 'package:patient/provider/auth_provider.dart';
+import 'package:patient/repository/supabase_auth_repository.dart';
import 'package:patient/provider/reports_provider.dart';
@@ -34,7 +36,13 @@ Future main() async {
MultiProvider(
providers: [
ChangeNotifierProvider(create: (_) => AssessmentProvider()),
- ChangeNotifierProvider(create: (_) => AuthProvider()),
+ ChangeNotifierProvider(
+ create: (_) => AuthProvider(
+ authRepository: SupabaseAuthRepository(
+ supabaseClient: Supabase.instance.client,
+ ),
+ ),
+ ),
ChangeNotifierProvider(create: (_) => ReportsProvider()),
ChangeNotifierProvider(create: (_) => TaskProvider()),
@@ -50,6 +58,7 @@ class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
+ scaffoldMessengerKey: SnackbarService.scaffoldMessengerKey,
debugShowCheckedModeBanner: false,
title: 'Patient App',
theme: AppTheme.lightTheme(),
diff --git a/patient/lib/model/assessment_models/assessment_answer_model.dart b/patient/lib/model/assessment_models/assessment_answer_model.dart
new file mode 100644
index 0000000..f29fcbd
--- /dev/null
+++ b/patient/lib/model/assessment_models/assessment_answer_model.dart
@@ -0,0 +1,29 @@
+import 'package:dart_mappable/dart_mappable.dart';
+import 'package:patient/core/entities/assessment_entities/assessment_answer_entity.dart';
+
+import 'assessment_question_answer_model.dart';
+
+part 'assessment_answer_model.mapper.dart';
+
+@MappableClass()
+class AssessmentAnswerModel with AssessmentAnswerModelMappable {
+
+ @MappableField(key: 'assessment_id')
+ final String assessmentId;
+
+ @MappableField(key: 'questions')
+ final List questions;
+
+ AssessmentAnswerModel({
+ required this.assessmentId,
+ required this.questions,
+ });
+
+ AssessmentAnswerEntity toEntity() {
+ return AssessmentAnswerEntity(
+ assessmentId: assessmentId,
+ questions: questions.map((e) => e.toEntity()).toList(),
+ );
+ }
+
+}
\ No newline at end of file
diff --git a/patient/lib/model/assessment_models/assessment_answer_model.mapper.dart b/patient/lib/model/assessment_models/assessment_answer_model.mapper.dart
new file mode 100644
index 0000000..e0e1924
--- /dev/null
+++ b/patient/lib/model/assessment_models/assessment_answer_model.mapper.dart
@@ -0,0 +1,148 @@
+// coverage:ignore-file
+// GENERATED CODE - DO NOT MODIFY BY HAND
+// ignore_for_file: type=lint
+// ignore_for_file: unused_element, unnecessary_cast, override_on_non_overriding_member
+// ignore_for_file: strict_raw_type, inference_failure_on_untyped_parameter
+
+part of 'assessment_answer_model.dart';
+
+class AssessmentAnswerModelMapper
+ extends ClassMapperBase {
+ AssessmentAnswerModelMapper._();
+
+ static AssessmentAnswerModelMapper? _instance;
+ static AssessmentAnswerModelMapper ensureInitialized() {
+ if (_instance == null) {
+ MapperContainer.globals.use(_instance = AssessmentAnswerModelMapper._());
+ AssessmentQuestionAnswerModelMapper.ensureInitialized();
+ }
+ return _instance!;
+ }
+
+ @override
+ final String id = 'AssessmentAnswerModel';
+
+ static String _$assessmentId(AssessmentAnswerModel v) => v.assessmentId;
+ static const Field _f$assessmentId =
+ Field('assessmentId', _$assessmentId, key: r'assessment_id');
+ static List _$questions(
+ AssessmentAnswerModel v) =>
+ v.questions;
+ static const Field>
+ _f$questions = Field('questions', _$questions);
+
+ @override
+ final MappableFields fields = const {
+ #assessmentId: _f$assessmentId,
+ #questions: _f$questions,
+ };
+
+ static AssessmentAnswerModel _instantiate(DecodingData data) {
+ return AssessmentAnswerModel(
+ assessmentId: data.dec(_f$assessmentId),
+ questions: data.dec(_f$questions));
+ }
+
+ @override
+ final Function instantiate = _instantiate;
+
+ static AssessmentAnswerModel fromMap(Map map) {
+ return ensureInitialized().decodeMap(map);
+ }
+
+ static AssessmentAnswerModel fromJson(String json) {
+ return ensureInitialized().decodeJson(json);
+ }
+}
+
+mixin AssessmentAnswerModelMappable {
+ String toJson() {
+ return AssessmentAnswerModelMapper.ensureInitialized()
+ .encodeJson(this as AssessmentAnswerModel);
+ }
+
+ Map toMap() {
+ return AssessmentAnswerModelMapper.ensureInitialized()
+ .encodeMap(this as AssessmentAnswerModel);
+ }
+
+ AssessmentAnswerModelCopyWith
+ get copyWith => _AssessmentAnswerModelCopyWithImpl(
+ this as AssessmentAnswerModel, $identity, $identity);
+ @override
+ String toString() {
+ return AssessmentAnswerModelMapper.ensureInitialized()
+ .stringifyValue(this as AssessmentAnswerModel);
+ }
+
+ @override
+ bool operator ==(Object other) {
+ return AssessmentAnswerModelMapper.ensureInitialized()
+ .equalsValue(this as AssessmentAnswerModel, other);
+ }
+
+ @override
+ int get hashCode {
+ return AssessmentAnswerModelMapper.ensureInitialized()
+ .hashValue(this as AssessmentAnswerModel);
+ }
+}
+
+extension AssessmentAnswerModelValueCopy<$R, $Out>
+ on ObjectCopyWith<$R, AssessmentAnswerModel, $Out> {
+ AssessmentAnswerModelCopyWith<$R, AssessmentAnswerModel, $Out>
+ get $asAssessmentAnswerModel =>
+ $base.as((v, t, t2) => _AssessmentAnswerModelCopyWithImpl(v, t, t2));
+}
+
+abstract class AssessmentAnswerModelCopyWith<
+ $R,
+ $In extends AssessmentAnswerModel,
+ $Out> implements ClassCopyWith<$R, $In, $Out> {
+ ListCopyWith<
+ $R,
+ AssessmentQuestionAnswerModel,
+ AssessmentQuestionAnswerModelCopyWith<$R, AssessmentQuestionAnswerModel,
+ AssessmentQuestionAnswerModel>> get questions;
+ $R call(
+ {String? assessmentId, List? questions});
+ AssessmentAnswerModelCopyWith<$R2, $In, $Out2> $chain<$R2, $Out2>(
+ Then<$Out2, $R2> t);
+}
+
+class _AssessmentAnswerModelCopyWithImpl<$R, $Out>
+ extends ClassCopyWithBase<$R, AssessmentAnswerModel, $Out>
+ implements AssessmentAnswerModelCopyWith<$R, AssessmentAnswerModel, $Out> {
+ _AssessmentAnswerModelCopyWithImpl(super.value, super.then, super.then2);
+
+ @override
+ late final ClassMapperBase $mapper =
+ AssessmentAnswerModelMapper.ensureInitialized();
+ @override
+ ListCopyWith<
+ $R,
+ AssessmentQuestionAnswerModel,
+ AssessmentQuestionAnswerModelCopyWith<$R, AssessmentQuestionAnswerModel,
+ AssessmentQuestionAnswerModel>> get questions => ListCopyWith(
+ $value.questions,
+ (v, t) => v.copyWith.$chain(t),
+ (v) => call(questions: v));
+ @override
+ $R call(
+ {String? assessmentId,
+ List? questions}) =>
+ $apply(FieldCopyWithData({
+ if (assessmentId != null) #assessmentId: assessmentId,
+ if (questions != null) #questions: questions
+ }));
+ @override
+ AssessmentAnswerModel $make(CopyWithData data) => AssessmentAnswerModel(
+ assessmentId: data.get(#assessmentId, or: $value.assessmentId),
+ questions: data.get(#questions, or: $value.questions));
+
+ @override
+ AssessmentAnswerModelCopyWith<$R2, AssessmentAnswerModel, $Out2>
+ $chain<$R2, $Out2>(Then<$Out2, $R2> t) =>
+ _AssessmentAnswerModelCopyWithImpl($value, $cast, t);
+}
diff --git a/patient/lib/model/assessment_models/assessment_model.dart b/patient/lib/model/assessment_models/assessment_model.dart
new file mode 100644
index 0000000..b1645f7
--- /dev/null
+++ b/patient/lib/model/assessment_models/assessment_model.dart
@@ -0,0 +1,44 @@
+import 'package:dart_mappable/dart_mappable.dart';
+import 'package:patient/model/assessment_models/assessment_question_model.dart';
+
+
+part 'assessment_model.mapper.dart';
+
+@MappableClass()
+class AssessmentModel with AssessmentModelMappable {
+ @MappableField(key: 'id')
+ final String assessmentId;
+
+ @MappableField(key: 'created_at')
+ final String createdAt;
+
+ @MappableField(key: 'name')
+ final String name;
+
+ @MappableField(key: 'description')
+ final String description;
+
+ @MappableField(key: 'category')
+ final String category;
+
+ @MappableField(key: 'cutoff_score')
+ final int cutoffScore;
+
+ @MappableField(key: 'image_url')
+ final String imageUrl;
+
+ @MappableField(key: 'questions')
+ final List questions;
+
+ AssessmentModel({
+ required this.assessmentId,
+ required this.createdAt,
+ required this.name,
+ required this.description,
+ required this.category,
+ required this.cutoffScore,
+ required this.questions,
+ required this.imageUrl,
+ });
+
+}
\ No newline at end of file
diff --git a/patient/lib/model/assessment_models/assessment_model.mapper.dart b/patient/lib/model/assessment_models/assessment_model.mapper.dart
new file mode 100644
index 0000000..06c94b5
--- /dev/null
+++ b/patient/lib/model/assessment_models/assessment_model.mapper.dart
@@ -0,0 +1,196 @@
+// coverage:ignore-file
+// GENERATED CODE - DO NOT MODIFY BY HAND
+// ignore_for_file: type=lint
+// ignore_for_file: unused_element, unnecessary_cast, override_on_non_overriding_member
+// ignore_for_file: strict_raw_type, inference_failure_on_untyped_parameter
+
+part of 'assessment_model.dart';
+
+class AssessmentModelMapper extends ClassMapperBase {
+ AssessmentModelMapper._();
+
+ static AssessmentModelMapper? _instance;
+ static AssessmentModelMapper ensureInitialized() {
+ if (_instance == null) {
+ MapperContainer.globals.use(_instance = AssessmentModelMapper._());
+ AssessmentQuestionModelMapper.ensureInitialized();
+ }
+ return _instance!;
+ }
+
+ @override
+ final String id = 'AssessmentModel';
+
+ static String _$assessmentId(AssessmentModel v) => v.assessmentId;
+ static const Field _f$assessmentId =
+ Field('assessmentId', _$assessmentId, key: r'id');
+ static String _$createdAt(AssessmentModel v) => v.createdAt;
+ static const Field _f$createdAt =
+ Field('createdAt', _$createdAt, key: r'created_at');
+ static String _$name(AssessmentModel v) => v.name;
+ static const Field _f$name = Field('name', _$name);
+ static String _$description(AssessmentModel v) => v.description;
+ static const Field _f$description =
+ Field('description', _$description);
+ static String _$category(AssessmentModel v) => v.category;
+ static const Field _f$category =
+ Field('category', _$category);
+ static int _$cutoffScore(AssessmentModel v) => v.cutoffScore;
+ static const Field _f$cutoffScore =
+ Field('cutoffScore', _$cutoffScore, key: r'cutoff_score');
+ static List _$questions(AssessmentModel v) =>
+ v.questions;
+ static const Field>
+ _f$questions = Field('questions', _$questions);
+ static String _$imageUrl(AssessmentModel v) => v.imageUrl;
+ static const Field _f$imageUrl =
+ Field('imageUrl', _$imageUrl, key: r'image_url');
+
+ @override
+ final MappableFields fields = const {
+ #assessmentId: _f$assessmentId,
+ #createdAt: _f$createdAt,
+ #name: _f$name,
+ #description: _f$description,
+ #category: _f$category,
+ #cutoffScore: _f$cutoffScore,
+ #questions: _f$questions,
+ #imageUrl: _f$imageUrl,
+ };
+
+ static AssessmentModel _instantiate(DecodingData data) {
+ return AssessmentModel(
+ assessmentId: data.dec(_f$assessmentId),
+ createdAt: data.dec(_f$createdAt),
+ name: data.dec(_f$name),
+ description: data.dec(_f$description),
+ category: data.dec(_f$category),
+ cutoffScore: data.dec(_f$cutoffScore),
+ questions: data.dec(_f$questions),
+ imageUrl: data.dec(_f$imageUrl));
+ }
+
+ @override
+ final Function instantiate = _instantiate;
+
+ static AssessmentModel fromMap(Map map) {
+ return ensureInitialized().decodeMap(map);
+ }
+
+ static AssessmentModel fromJson(String json) {
+ return ensureInitialized().decodeJson(json);
+ }
+}
+
+mixin AssessmentModelMappable {
+ String toJson() {
+ return AssessmentModelMapper.ensureInitialized()
+ .encodeJson(this as AssessmentModel);
+ }
+
+ Map toMap() {
+ return AssessmentModelMapper.ensureInitialized()
+ .encodeMap(this as AssessmentModel);
+ }
+
+ AssessmentModelCopyWith
+ get copyWith => _AssessmentModelCopyWithImpl(
+ this as AssessmentModel, $identity, $identity);
+ @override
+ String toString() {
+ return AssessmentModelMapper.ensureInitialized()
+ .stringifyValue(this as AssessmentModel);
+ }
+
+ @override
+ bool operator ==(Object other) {
+ return AssessmentModelMapper.ensureInitialized()
+ .equalsValue(this as AssessmentModel, other);
+ }
+
+ @override
+ int get hashCode {
+ return AssessmentModelMapper.ensureInitialized()
+ .hashValue(this as AssessmentModel);
+ }
+}
+
+extension AssessmentModelValueCopy<$R, $Out>
+ on ObjectCopyWith<$R, AssessmentModel, $Out> {
+ AssessmentModelCopyWith<$R, AssessmentModel, $Out> get $asAssessmentModel =>
+ $base.as((v, t, t2) => _AssessmentModelCopyWithImpl(v, t, t2));
+}
+
+abstract class AssessmentModelCopyWith<$R, $In extends AssessmentModel, $Out>
+ implements ClassCopyWith<$R, $In, $Out> {
+ ListCopyWith<
+ $R,
+ AssessmentQuestionModel,
+ AssessmentQuestionModelCopyWith<$R, AssessmentQuestionModel,
+ AssessmentQuestionModel>> get questions;
+ $R call(
+ {String? assessmentId,
+ String? createdAt,
+ String? name,
+ String? description,
+ String? category,
+ int? cutoffScore,
+ List? questions,
+ String? imageUrl});
+ AssessmentModelCopyWith<$R2, $In, $Out2> $chain<$R2, $Out2>(
+ Then<$Out2, $R2> t);
+}
+
+class _AssessmentModelCopyWithImpl<$R, $Out>
+ extends ClassCopyWithBase<$R, AssessmentModel, $Out>
+ implements AssessmentModelCopyWith<$R, AssessmentModel, $Out> {
+ _AssessmentModelCopyWithImpl(super.value, super.then, super.then2);
+
+ @override
+ late final ClassMapperBase $mapper =
+ AssessmentModelMapper.ensureInitialized();
+ @override
+ ListCopyWith<
+ $R,
+ AssessmentQuestionModel,
+ AssessmentQuestionModelCopyWith<$R, AssessmentQuestionModel,
+ AssessmentQuestionModel>> get questions => ListCopyWith(
+ $value.questions,
+ (v, t) => v.copyWith.$chain(t),
+ (v) => call(questions: v));
+ @override
+ $R call(
+ {String? assessmentId,
+ String? createdAt,
+ String? name,
+ String? description,
+ String? category,
+ int? cutoffScore,
+ List? questions,
+ String? imageUrl}) =>
+ $apply(FieldCopyWithData({
+ if (assessmentId != null) #assessmentId: assessmentId,
+ if (createdAt != null) #createdAt: createdAt,
+ if (name != null) #name: name,
+ if (description != null) #description: description,
+ if (category != null) #category: category,
+ if (cutoffScore != null) #cutoffScore: cutoffScore,
+ if (questions != null) #questions: questions,
+ if (imageUrl != null) #imageUrl: imageUrl
+ }));
+ @override
+ AssessmentModel $make(CopyWithData data) => AssessmentModel(
+ assessmentId: data.get(#assessmentId, or: $value.assessmentId),
+ createdAt: data.get(#createdAt, or: $value.createdAt),
+ name: data.get(#name, or: $value.name),
+ description: data.get(#description, or: $value.description),
+ category: data.get(#category, or: $value.category),
+ cutoffScore: data.get(#cutoffScore, or: $value.cutoffScore),
+ questions: data.get(#questions, or: $value.questions),
+ imageUrl: data.get(#imageUrl, or: $value.imageUrl));
+
+ @override
+ AssessmentModelCopyWith<$R2, AssessmentModel, $Out2> $chain<$R2, $Out2>(
+ Then<$Out2, $R2> t) =>
+ _AssessmentModelCopyWithImpl($value, $cast, t);
+}
diff --git a/patient/lib/model/assessment_models/assessment_models.dart b/patient/lib/model/assessment_models/assessment_models.dart
new file mode 100644
index 0000000..14d6262
--- /dev/null
+++ b/patient/lib/model/assessment_models/assessment_models.dart
@@ -0,0 +1,7 @@
+export './assessment_models.dart';
+export './assessment_question_model.dart';
+export './assessment_option_model.dart';
+export './assessment_model.dart';
+export './assessment_answer_model.dart';
+export './assessment_result_model.dart';
+export './assessment_question_answer_model.dart';
\ No newline at end of file
diff --git a/patient/lib/model/assessment_models/assessment_option_model.dart b/patient/lib/model/assessment_models/assessment_option_model.dart
new file mode 100644
index 0000000..8f8bdbe
--- /dev/null
+++ b/patient/lib/model/assessment_models/assessment_option_model.dart
@@ -0,0 +1,23 @@
+import 'package:dart_mappable/dart_mappable.dart';
+
+part 'assessment_option_model.mapper.dart';
+
+@MappableClass()
+class AssessmentOptionModel with AssessmentOptionModelMappable {
+
+ @MappableField(key: 'option_id')
+ final String optionId;
+
+ @MappableField(key: 'text')
+ final String text;
+
+ @MappableField(key: 'score')
+ final int score;
+
+ AssessmentOptionModel({
+ required this.optionId,
+ required this.text,
+ required this.score,
+ });
+
+}
\ No newline at end of file
diff --git a/patient/lib/model/assessment_models/assessment_option_model.mapper.dart b/patient/lib/model/assessment_models/assessment_option_model.mapper.dart
new file mode 100644
index 0000000..4a179c5
--- /dev/null
+++ b/patient/lib/model/assessment_models/assessment_option_model.mapper.dart
@@ -0,0 +1,135 @@
+// coverage:ignore-file
+// GENERATED CODE - DO NOT MODIFY BY HAND
+// ignore_for_file: type=lint
+// ignore_for_file: unused_element, unnecessary_cast, override_on_non_overriding_member
+// ignore_for_file: strict_raw_type, inference_failure_on_untyped_parameter
+
+part of 'assessment_option_model.dart';
+
+class AssessmentOptionModelMapper
+ extends ClassMapperBase {
+ AssessmentOptionModelMapper._();
+
+ static AssessmentOptionModelMapper? _instance;
+ static AssessmentOptionModelMapper ensureInitialized() {
+ if (_instance == null) {
+ MapperContainer.globals.use(_instance = AssessmentOptionModelMapper._());
+ }
+ return _instance!;
+ }
+
+ @override
+ final String id = 'AssessmentOptionModel';
+
+ static String _$optionId(AssessmentOptionModel v) => v.optionId;
+ static const Field _f$optionId =
+ Field('optionId', _$optionId, key: r'option_id');
+ static String _$text(AssessmentOptionModel v) => v.text;
+ static const Field _f$text =
+ Field('text', _$text);
+ static int _$score(AssessmentOptionModel v) => v.score;
+ static const Field _f$score =
+ Field('score', _$score);
+
+ @override
+ final MappableFields fields = const {
+ #optionId: _f$optionId,
+ #text: _f$text,
+ #score: _f$score,
+ };
+
+ static AssessmentOptionModel _instantiate(DecodingData data) {
+ return AssessmentOptionModel(
+ optionId: data.dec(_f$optionId),
+ text: data.dec(_f$text),
+ score: data.dec(_f$score));
+ }
+
+ @override
+ final Function instantiate = _instantiate;
+
+ static AssessmentOptionModel fromMap(Map map) {
+ return ensureInitialized().decodeMap(map);
+ }
+
+ static AssessmentOptionModel fromJson(String json) {
+ return ensureInitialized().decodeJson(json);
+ }
+}
+
+mixin AssessmentOptionModelMappable {
+ String toJson() {
+ return AssessmentOptionModelMapper.ensureInitialized()
+ .encodeJson(this as AssessmentOptionModel);
+ }
+
+ Map toMap() {
+ return AssessmentOptionModelMapper.ensureInitialized()
+ .encodeMap(this as AssessmentOptionModel);
+ }
+
+ AssessmentOptionModelCopyWith
+ get copyWith => _AssessmentOptionModelCopyWithImpl(
+ this as AssessmentOptionModel, $identity, $identity);
+ @override
+ String toString() {
+ return AssessmentOptionModelMapper.ensureInitialized()
+ .stringifyValue(this as AssessmentOptionModel);
+ }
+
+ @override
+ bool operator ==(Object other) {
+ return AssessmentOptionModelMapper.ensureInitialized()
+ .equalsValue(this as AssessmentOptionModel, other);
+ }
+
+ @override
+ int get hashCode {
+ return AssessmentOptionModelMapper.ensureInitialized()
+ .hashValue(this as AssessmentOptionModel);
+ }
+}
+
+extension AssessmentOptionModelValueCopy<$R, $Out>
+ on ObjectCopyWith<$R, AssessmentOptionModel, $Out> {
+ AssessmentOptionModelCopyWith<$R, AssessmentOptionModel, $Out>
+ get $asAssessmentOptionModel =>
+ $base.as((v, t, t2) => _AssessmentOptionModelCopyWithImpl(v, t, t2));
+}
+
+abstract class AssessmentOptionModelCopyWith<
+ $R,
+ $In extends AssessmentOptionModel,
+ $Out> implements ClassCopyWith<$R, $In, $Out> {
+ $R call({String? optionId, String? text, int? score});
+ AssessmentOptionModelCopyWith<$R2, $In, $Out2> $chain<$R2, $Out2>(
+ Then<$Out2, $R2> t);
+}
+
+class _AssessmentOptionModelCopyWithImpl<$R, $Out>
+ extends ClassCopyWithBase<$R, AssessmentOptionModel, $Out>
+ implements AssessmentOptionModelCopyWith<$R, AssessmentOptionModel, $Out> {
+ _AssessmentOptionModelCopyWithImpl(super.value, super.then, super.then2);
+
+ @override
+ late final ClassMapperBase $mapper =
+ AssessmentOptionModelMapper.ensureInitialized();
+ @override
+ $R call({String? optionId, String? text, int? score}) =>
+ $apply(FieldCopyWithData({
+ if (optionId != null) #optionId: optionId,
+ if (text != null) #text: text,
+ if (score != null) #score: score
+ }));
+ @override
+ AssessmentOptionModel $make(CopyWithData data) => AssessmentOptionModel(
+ optionId: data.get(#optionId, or: $value.optionId),
+ text: data.get(#text, or: $value.text),
+ score: data.get(#score, or: $value.score));
+
+ @override
+ AssessmentOptionModelCopyWith<$R2, AssessmentOptionModel, $Out2>
+ $chain<$R2, $Out2>(Then<$Out2, $R2> t) =>
+ _AssessmentOptionModelCopyWithImpl($value, $cast, t);
+}
diff --git a/patient/lib/model/assessment_models/assessment_question_answer_model.dart b/patient/lib/model/assessment_models/assessment_question_answer_model.dart
new file mode 100644
index 0000000..faf71b7
--- /dev/null
+++ b/patient/lib/model/assessment_models/assessment_question_answer_model.dart
@@ -0,0 +1,27 @@
+import 'package:dart_mappable/dart_mappable.dart';
+import 'package:patient/core/entities/assessment_entities/assessment_question_answer_entity.dart';
+
+part 'assessment_question_answer_model.mapper.dart';
+
+@MappableClass()
+class AssessmentQuestionAnswerModel with AssessmentQuestionAnswerModelMappable {
+
+ @MappableField(key: 'question_id')
+ final String questionId;
+
+ @MappableField(key: 'answer_id')
+ final String answerId;
+
+ AssessmentQuestionAnswerModel({
+ required this.questionId,
+ required this.answerId,
+ });
+
+ AssessmentQuestionAnswerEntity toEntity() {
+ return AssessmentQuestionAnswerEntity(
+ questionId: questionId,
+ answerId: answerId,
+ );
+ }
+
+}
\ No newline at end of file
diff --git a/patient/lib/model/assessment_models/assessment_question_answer_model.mapper.dart b/patient/lib/model/assessment_models/assessment_question_answer_model.mapper.dart
new file mode 100644
index 0000000..7b11446
--- /dev/null
+++ b/patient/lib/model/assessment_models/assessment_question_answer_model.mapper.dart
@@ -0,0 +1,134 @@
+// coverage:ignore-file
+// GENERATED CODE - DO NOT MODIFY BY HAND
+// ignore_for_file: type=lint
+// ignore_for_file: unused_element, unnecessary_cast, override_on_non_overriding_member
+// ignore_for_file: strict_raw_type, inference_failure_on_untyped_parameter
+
+part of 'assessment_question_answer_model.dart';
+
+class AssessmentQuestionAnswerModelMapper
+ extends ClassMapperBase {
+ AssessmentQuestionAnswerModelMapper._();
+
+ static AssessmentQuestionAnswerModelMapper? _instance;
+ static AssessmentQuestionAnswerModelMapper ensureInitialized() {
+ if (_instance == null) {
+ MapperContainer.globals
+ .use(_instance = AssessmentQuestionAnswerModelMapper._());
+ }
+ return _instance!;
+ }
+
+ @override
+ final String id = 'AssessmentQuestionAnswerModel';
+
+ static String _$questionId(AssessmentQuestionAnswerModel v) => v.questionId;
+ static const Field _f$questionId =
+ Field('questionId', _$questionId, key: r'question_id');
+ static String _$answerId(AssessmentQuestionAnswerModel v) => v.answerId;
+ static const Field _f$answerId =
+ Field('answerId', _$answerId, key: r'answer_id');
+
+ @override
+ final MappableFields fields = const {
+ #questionId: _f$questionId,
+ #answerId: _f$answerId,
+ };
+
+ static AssessmentQuestionAnswerModel _instantiate(DecodingData data) {
+ return AssessmentQuestionAnswerModel(
+ questionId: data.dec(_f$questionId), answerId: data.dec(_f$answerId));
+ }
+
+ @override
+ final Function instantiate = _instantiate;
+
+ static AssessmentQuestionAnswerModel fromMap(Map map) {
+ return ensureInitialized().decodeMap(map);
+ }
+
+ static AssessmentQuestionAnswerModel fromJson(String json) {
+ return ensureInitialized().decodeJson(json);
+ }
+}
+
+mixin AssessmentQuestionAnswerModelMappable {
+ String toJson() {
+ return AssessmentQuestionAnswerModelMapper.ensureInitialized()
+ .encodeJson(
+ this as AssessmentQuestionAnswerModel);
+ }
+
+ Map toMap() {
+ return AssessmentQuestionAnswerModelMapper.ensureInitialized()
+ .encodeMap(
+ this as AssessmentQuestionAnswerModel);
+ }
+
+ AssessmentQuestionAnswerModelCopyWith
+ get copyWith => _AssessmentQuestionAnswerModelCopyWithImpl(
+ this as AssessmentQuestionAnswerModel, $identity, $identity);
+ @override
+ String toString() {
+ return AssessmentQuestionAnswerModelMapper.ensureInitialized()
+ .stringifyValue(this as AssessmentQuestionAnswerModel);
+ }
+
+ @override
+ bool operator ==(Object other) {
+ return AssessmentQuestionAnswerModelMapper.ensureInitialized()
+ .equalsValue(this as AssessmentQuestionAnswerModel, other);
+ }
+
+ @override
+ int get hashCode {
+ return AssessmentQuestionAnswerModelMapper.ensureInitialized()
+ .hashValue(this as AssessmentQuestionAnswerModel);
+ }
+}
+
+extension AssessmentQuestionAnswerModelValueCopy<$R, $Out>
+ on ObjectCopyWith<$R, AssessmentQuestionAnswerModel, $Out> {
+ AssessmentQuestionAnswerModelCopyWith<$R, AssessmentQuestionAnswerModel, $Out>
+ get $asAssessmentQuestionAnswerModel => $base.as(
+ (v, t, t2) => _AssessmentQuestionAnswerModelCopyWithImpl(v, t, t2));
+}
+
+abstract class AssessmentQuestionAnswerModelCopyWith<
+ $R,
+ $In extends AssessmentQuestionAnswerModel,
+ $Out> implements ClassCopyWith<$R, $In, $Out> {
+ $R call({String? questionId, String? answerId});
+ AssessmentQuestionAnswerModelCopyWith<$R2, $In, $Out2> $chain<$R2, $Out2>(
+ Then<$Out2, $R2> t);
+}
+
+class _AssessmentQuestionAnswerModelCopyWithImpl<$R, $Out>
+ extends ClassCopyWithBase<$R, AssessmentQuestionAnswerModel, $Out>
+ implements
+ AssessmentQuestionAnswerModelCopyWith<$R, AssessmentQuestionAnswerModel,
+ $Out> {
+ _AssessmentQuestionAnswerModelCopyWithImpl(
+ super.value, super.then, super.then2);
+
+ @override
+ late final ClassMapperBase $mapper =
+ AssessmentQuestionAnswerModelMapper.ensureInitialized();
+ @override
+ $R call({String? questionId, String? answerId}) => $apply(FieldCopyWithData({
+ if (questionId != null) #questionId: questionId,
+ if (answerId != null) #answerId: answerId
+ }));
+ @override
+ AssessmentQuestionAnswerModel $make(CopyWithData data) =>
+ AssessmentQuestionAnswerModel(
+ questionId: data.get(#questionId, or: $value.questionId),
+ answerId: data.get(#answerId, or: $value.answerId));
+
+ @override
+ AssessmentQuestionAnswerModelCopyWith<$R2, AssessmentQuestionAnswerModel,
+ $Out2> $chain<$R2, $Out2>(
+ Then<$Out2, $R2> t) =>
+ _AssessmentQuestionAnswerModelCopyWithImpl($value, $cast, t);
+}
diff --git a/patient/lib/model/assessment_models/assessment_question_model.dart b/patient/lib/model/assessment_models/assessment_question_model.dart
new file mode 100644
index 0000000..743c5fd
--- /dev/null
+++ b/patient/lib/model/assessment_models/assessment_question_model.dart
@@ -0,0 +1,26 @@
+
+import 'package:dart_mappable/dart_mappable.dart';
+import 'package:patient/model/assessment_models/assessment_option_model.dart';
+
+part 'assessment_question_model.mapper.dart';
+
+
+@MappableClass()
+class AssessmentQuestionModel with AssessmentQuestionModelMappable {
+
+ @MappableField(key: 'question_id')
+ final String questionId;
+
+ @MappableField(key: 'text')
+ final String text;
+
+ @MappableField(key: 'options')
+ final List options;
+
+ AssessmentQuestionModel({
+ required this.questionId,
+ required this.text,
+ required this.options,
+ });
+
+}
\ No newline at end of file
diff --git a/patient/lib/model/assessment_models/assessment_question_model.mapper.dart b/patient/lib/model/assessment_models/assessment_question_model.mapper.dart
new file mode 100644
index 0000000..d808c63
--- /dev/null
+++ b/patient/lib/model/assessment_models/assessment_question_model.mapper.dart
@@ -0,0 +1,155 @@
+// coverage:ignore-file
+// GENERATED CODE - DO NOT MODIFY BY HAND
+// ignore_for_file: type=lint
+// ignore_for_file: unused_element, unnecessary_cast, override_on_non_overriding_member
+// ignore_for_file: strict_raw_type, inference_failure_on_untyped_parameter
+
+part of 'assessment_question_model.dart';
+
+class AssessmentQuestionModelMapper
+ extends ClassMapperBase {
+ AssessmentQuestionModelMapper._();
+
+ static AssessmentQuestionModelMapper? _instance;
+ static AssessmentQuestionModelMapper ensureInitialized() {
+ if (_instance == null) {
+ MapperContainer.globals
+ .use(_instance = AssessmentQuestionModelMapper._());
+ AssessmentOptionModelMapper.ensureInitialized();
+ }
+ return _instance!;
+ }
+
+ @override
+ final String id = 'AssessmentQuestionModel';
+
+ static String _$questionId(AssessmentQuestionModel v) => v.questionId;
+ static const Field _f$questionId =
+ Field('questionId', _$questionId, key: r'question_id');
+ static String _$text(AssessmentQuestionModel v) => v.text;
+ static const Field _f$text =
+ Field('text', _$text);
+ static List _$options(AssessmentQuestionModel v) =>
+ v.options;
+ static const Field>
+ _f$options = Field('options', _$options);
+
+ @override
+ final MappableFields fields = const {
+ #questionId: _f$questionId,
+ #text: _f$text,
+ #options: _f$options,
+ };
+
+ static AssessmentQuestionModel _instantiate(DecodingData data) {
+ return AssessmentQuestionModel(
+ questionId: data.dec(_f$questionId),
+ text: data.dec(_f$text),
+ options: data.dec(_f$options));
+ }
+
+ @override
+ final Function instantiate = _instantiate;
+
+ static AssessmentQuestionModel fromMap(Map map) {
+ return ensureInitialized().decodeMap(map);
+ }
+
+ static AssessmentQuestionModel fromJson(String json) {
+ return ensureInitialized().decodeJson(json);
+ }
+}
+
+mixin AssessmentQuestionModelMappable {
+ String toJson() {
+ return AssessmentQuestionModelMapper.ensureInitialized()
+ .encodeJson(this as AssessmentQuestionModel);
+ }
+
+ Map toMap() {
+ return AssessmentQuestionModelMapper.ensureInitialized()
+ .encodeMap(this as AssessmentQuestionModel);
+ }
+
+ AssessmentQuestionModelCopyWith
+ get copyWith => _AssessmentQuestionModelCopyWithImpl(
+ this as AssessmentQuestionModel, $identity, $identity);
+ @override
+ String toString() {
+ return AssessmentQuestionModelMapper.ensureInitialized()
+ .stringifyValue(this as AssessmentQuestionModel);
+ }
+
+ @override
+ bool operator ==(Object other) {
+ return AssessmentQuestionModelMapper.ensureInitialized()
+ .equalsValue(this as AssessmentQuestionModel, other);
+ }
+
+ @override
+ int get hashCode {
+ return AssessmentQuestionModelMapper.ensureInitialized()
+ .hashValue(this as AssessmentQuestionModel);
+ }
+}
+
+extension AssessmentQuestionModelValueCopy<$R, $Out>
+ on ObjectCopyWith<$R, AssessmentQuestionModel, $Out> {
+ AssessmentQuestionModelCopyWith<$R, AssessmentQuestionModel, $Out>
+ get $asAssessmentQuestionModel => $base
+ .as((v, t, t2) => _AssessmentQuestionModelCopyWithImpl(v, t, t2));
+}
+
+abstract class AssessmentQuestionModelCopyWith<
+ $R,
+ $In extends AssessmentQuestionModel,
+ $Out> implements ClassCopyWith<$R, $In, $Out> {
+ ListCopyWith<
+ $R,
+ AssessmentOptionModel,
+ AssessmentOptionModelCopyWith<$R, AssessmentOptionModel,
+ AssessmentOptionModel>> get options;
+ $R call(
+ {String? questionId, String? text, List? options});
+ AssessmentQuestionModelCopyWith<$R2, $In, $Out2> $chain<$R2, $Out2>(
+ Then<$Out2, $R2> t);
+}
+
+class _AssessmentQuestionModelCopyWithImpl<$R, $Out>
+ extends ClassCopyWithBase<$R, AssessmentQuestionModel, $Out>
+ implements
+ AssessmentQuestionModelCopyWith<$R, AssessmentQuestionModel, $Out> {
+ _AssessmentQuestionModelCopyWithImpl(super.value, super.then, super.then2);
+
+ @override
+ late final ClassMapperBase $mapper =
+ AssessmentQuestionModelMapper.ensureInitialized();
+ @override
+ ListCopyWith<
+ $R,
+ AssessmentOptionModel,
+ AssessmentOptionModelCopyWith<$R, AssessmentOptionModel,
+ AssessmentOptionModel>> get options => ListCopyWith(
+ $value.options, (v, t) => v.copyWith.$chain(t), (v) => call(options: v));
+ @override
+ $R call(
+ {String? questionId,
+ String? text,
+ List? options}) =>
+ $apply(FieldCopyWithData({
+ if (questionId != null) #questionId: questionId,
+ if (text != null) #text: text,
+ if (options != null) #options: options
+ }));
+ @override
+ AssessmentQuestionModel $make(CopyWithData data) => AssessmentQuestionModel(
+ questionId: data.get(#questionId, or: $value.questionId),
+ text: data.get(#text, or: $value.text),
+ options: data.get(#options, or: $value.options));
+
+ @override
+ AssessmentQuestionModelCopyWith<$R2, AssessmentQuestionModel, $Out2>
+ $chain<$R2, $Out2>(Then<$Out2, $R2> t) =>
+ _AssessmentQuestionModelCopyWithImpl($value, $cast, t);
+}
diff --git a/patient/lib/model/assessment_models/assessment_result_model.dart b/patient/lib/model/assessment_models/assessment_result_model.dart
new file mode 100644
index 0000000..85a248b
--- /dev/null
+++ b/patient/lib/model/assessment_models/assessment_result_model.dart
@@ -0,0 +1,24 @@
+
+import 'package:dart_mappable/dart_mappable.dart';
+
+part 'assessment_result_model.mapper.dart';
+
+@MappableClass()
+class AssessmentResultModel with AssessmentResultModelMappable {
+
+ @MappableField(key: 'assessment_score')
+ final int assessmentScore;
+
+ @MappableField(key: 'is_autistic')
+ final bool isAutistic;
+
+ @MappableField(key: 'message')
+ final String message;
+
+ AssessmentResultModel({
+ required this.assessmentScore,
+ required this.isAutistic,
+ required this.message,
+ });
+
+}
\ No newline at end of file
diff --git a/patient/lib/model/assessment_models/assessment_result_model.mapper.dart b/patient/lib/model/assessment_models/assessment_result_model.mapper.dart
new file mode 100644
index 0000000..7d2099f
--- /dev/null
+++ b/patient/lib/model/assessment_models/assessment_result_model.mapper.dart
@@ -0,0 +1,135 @@
+// coverage:ignore-file
+// GENERATED CODE - DO NOT MODIFY BY HAND
+// ignore_for_file: type=lint
+// ignore_for_file: unused_element, unnecessary_cast, override_on_non_overriding_member
+// ignore_for_file: strict_raw_type, inference_failure_on_untyped_parameter
+
+part of 'assessment_result_model.dart';
+
+class AssessmentResultModelMapper
+ extends ClassMapperBase {
+ AssessmentResultModelMapper._();
+
+ static AssessmentResultModelMapper? _instance;
+ static AssessmentResultModelMapper ensureInitialized() {
+ if (_instance == null) {
+ MapperContainer.globals.use(_instance = AssessmentResultModelMapper._());
+ }
+ return _instance!;
+ }
+
+ @override
+ final String id = 'AssessmentResultModel';
+
+ static int _$assessmentScore(AssessmentResultModel v) => v.assessmentScore;
+ static const Field _f$assessmentScore =
+ Field('assessmentScore', _$assessmentScore, key: r'assessment_score');
+ static bool _$isAutistic(AssessmentResultModel v) => v.isAutistic;
+ static const Field _f$isAutistic =
+ Field('isAutistic', _$isAutistic, key: r'is_autistic');
+ static String _$message(AssessmentResultModel v) => v.message;
+ static const Field _f$message =
+ Field('message', _$message);
+
+ @override
+ final MappableFields fields = const {
+ #assessmentScore: _f$assessmentScore,
+ #isAutistic: _f$isAutistic,
+ #message: _f$message,
+ };
+
+ static AssessmentResultModel _instantiate(DecodingData data) {
+ return AssessmentResultModel(
+ assessmentScore: data.dec(_f$assessmentScore),
+ isAutistic: data.dec(_f$isAutistic),
+ message: data.dec(_f$message));
+ }
+
+ @override
+ final Function instantiate = _instantiate;
+
+ static AssessmentResultModel fromMap(Map map) {
+ return ensureInitialized().decodeMap(map);
+ }
+
+ static AssessmentResultModel fromJson(String json) {
+ return ensureInitialized().decodeJson(json);
+ }
+}
+
+mixin AssessmentResultModelMappable {
+ String toJson() {
+ return AssessmentResultModelMapper.ensureInitialized()
+ .encodeJson(this as AssessmentResultModel);
+ }
+
+ Map toMap() {
+ return AssessmentResultModelMapper.ensureInitialized()
+ .encodeMap(this as AssessmentResultModel);
+ }
+
+ AssessmentResultModelCopyWith
+ get copyWith => _AssessmentResultModelCopyWithImpl(
+ this as AssessmentResultModel, $identity, $identity);
+ @override
+ String toString() {
+ return AssessmentResultModelMapper.ensureInitialized()
+ .stringifyValue(this as AssessmentResultModel);
+ }
+
+ @override
+ bool operator ==(Object other) {
+ return AssessmentResultModelMapper.ensureInitialized()
+ .equalsValue(this as AssessmentResultModel, other);
+ }
+
+ @override
+ int get hashCode {
+ return AssessmentResultModelMapper.ensureInitialized()
+ .hashValue(this as AssessmentResultModel);
+ }
+}
+
+extension AssessmentResultModelValueCopy<$R, $Out>
+ on ObjectCopyWith<$R, AssessmentResultModel, $Out> {
+ AssessmentResultModelCopyWith<$R, AssessmentResultModel, $Out>
+ get $asAssessmentResultModel =>
+ $base.as((v, t, t2) => _AssessmentResultModelCopyWithImpl(v, t, t2));
+}
+
+abstract class AssessmentResultModelCopyWith<
+ $R,
+ $In extends AssessmentResultModel,
+ $Out> implements ClassCopyWith<$R, $In, $Out> {
+ $R call({int? assessmentScore, bool? isAutistic, String? message});
+ AssessmentResultModelCopyWith<$R2, $In, $Out2> $chain<$R2, $Out2>(
+ Then<$Out2, $R2> t);
+}
+
+class _AssessmentResultModelCopyWithImpl<$R, $Out>
+ extends ClassCopyWithBase<$R, AssessmentResultModel, $Out>
+ implements AssessmentResultModelCopyWith<$R, AssessmentResultModel, $Out> {
+ _AssessmentResultModelCopyWithImpl(super.value, super.then, super.then2);
+
+ @override
+ late final ClassMapperBase $mapper =
+ AssessmentResultModelMapper.ensureInitialized();
+ @override
+ $R call({int? assessmentScore, bool? isAutistic, String? message}) =>
+ $apply(FieldCopyWithData({
+ if (assessmentScore != null) #assessmentScore: assessmentScore,
+ if (isAutistic != null) #isAutistic: isAutistic,
+ if (message != null) #message: message
+ }));
+ @override
+ AssessmentResultModel $make(CopyWithData data) => AssessmentResultModel(
+ assessmentScore: data.get(#assessmentScore, or: $value.assessmentScore),
+ isAutistic: data.get(#isAutistic, or: $value.isAutistic),
+ message: data.get(#message, or: $value.message));
+
+ @override
+ AssessmentResultModelCopyWith<$R2, AssessmentResultModel, $Out2>
+ $chain<$R2, $Out2>(Then<$Out2, $R2> t) =>
+ _AssessmentResultModelCopyWithImpl($value, $cast, t);
+}
diff --git a/patient/lib/model/model.dart b/patient/lib/model/model.dart
index c56e1d4..3abb371 100644
--- a/patient/lib/model/model.dart
+++ b/patient/lib/model/model.dart
@@ -1,3 +1,4 @@
export './model.dart';
export './auth_models/auth_model.dart';
-export 'patient_models/patient_models.dart';
\ No newline at end of file
+export 'patient_models/patient_models.dart';
+export './assessment_models/assessment_models.dart';
\ No newline at end of file
diff --git a/patient/lib/presentation/assessments/assessment_screen.dart b/patient/lib/presentation/assessments/assessment_screen.dart
index d4e35c1..993af76 100644
--- a/patient/lib/presentation/assessments/assessment_screen.dart
+++ b/patient/lib/presentation/assessments/assessment_screen.dart
@@ -1,10 +1,18 @@
import 'package:flutter/material.dart';
+import 'package:patient/core/core.dart';
import 'package:patient/core/theme/theme.dart';
+import 'package:patient/model/assessment_models/assessment_models.dart';
+import 'package:patient/presentation/widgets/snackbar_service.dart';
import 'package:patient/provider/assessment_provider.dart';
import 'package:provider/provider.dart';
class AssessmentScreen extends StatefulWidget {
- const AssessmentScreen({super.key});
+ const AssessmentScreen({
+ super.key,
+ required this.assessment,
+ });
+
+ final AssessmentModel assessment;
@override
AssessmentScreenState createState() => AssessmentScreenState();
@@ -14,25 +22,28 @@ class AssessmentScreenState extends State {
@override
void initState() {
super.initState();
+ }
+
+ @override
+ void didChangeDependencies() {
+ super.didChangeDependencies();
WidgetsBinding.instance.addPostFrameCallback((_) {
- Provider.of(context, listen: false)
- .fetchAssessmentBySelectedId();
+ final assessmentProvider = context.read();
+ if(assessmentProvider.submitAssessmentStatus.isSuccess) {
+ SnackbarService.showSuccess('${assessmentProvider.assessmentResultModel?.message}');
+ } else if(assessmentProvider.submitAssessmentStatus.isFailure) {
+ SnackbarService.showError('Something went wrong. Please try again later.');
+ }
});
}
@override
Widget build(BuildContext context) {
+ Provider.of(context, listen: true).submitAssessmentStatus;
return Scaffold(
body: SafeArea(
child: Consumer(
builder: (context, provider, child) {
- if (provider.assessment == null) {
- return const Center(
- child: CircularProgressIndicator(
- color: AppTheme.secondaryColor,
- ),
- );
- }
return Padding(
padding:
const EdgeInsets.symmetric(horizontal: 16.0, vertical: 20.0),
@@ -40,9 +51,9 @@ class AssessmentScreenState extends State {
crossAxisAlignment: CrossAxisAlignment.start,
children: [
const SizedBox(height: 8),
- const Text(
- "Autism Quotient (AQ)",
- style: TextStyle(
+ Text(
+ widget.assessment.name,
+ style: const TextStyle(
fontSize: 25,
fontWeight: FontWeight.bold,
color: Colors.black,
@@ -60,16 +71,18 @@ class AssessmentScreenState extends State {
child: Padding(
padding: const EdgeInsets.only(left: 16.0),
child: ListView.builder(
- itemCount:
- (provider.assessment!['questions'] as List).length,
+ itemCount: widget.assessment.questions.length,
itemBuilder: (context, index) {
- final question =
- provider.assessment!['questions'][index];
+ final question = widget.assessment.questions[index];
return QuestionCard(
question: question,
questionIndex: index,
- onAnswerSelected: (value) {
- provider.selectAnswer(index, value);
+ onAnswerSelected: (String optionId) {
+ context.read()
+ .assessmentAnswers = AssessmentQuestionAnswerModel(
+ questionId: question.questionId,
+ answerId: optionId,
+ );
},
);
},
@@ -85,7 +98,7 @@ class AssessmentScreenState extends State {
height: 50,
child: ElevatedButton(
onPressed: () {
- // Implement Submit Assessment logic here
+ context.read().submitAssessment();
},
style: ElevatedButton.styleFrom(
backgroundColor: AppTheme.secondaryColor,
@@ -118,7 +131,7 @@ class AssessmentScreenState extends State {
// Reusable QuestionCard Widget with Custom Checkbox
class QuestionCard extends StatelessWidget {
- final Map question;
+ final AssessmentQuestionModel question;
final int questionIndex;
final ValueChanged onAnswerSelected;
@@ -131,14 +144,13 @@ class QuestionCard extends StatelessWidget {
@override
Widget build(BuildContext context) {
- final provider = Provider.of(context, listen: false);
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.start,
children: [
const SizedBox(height: 30),
Text(
- question['text'] as String,
+ question.text,
style: const TextStyle(
fontSize: 16,
color: AppTheme.textColor,
@@ -146,10 +158,13 @@ class QuestionCard extends StatelessWidget {
),
),
const SizedBox(height: 10),
- ...List