From 7ddc76d393245b2b207b8d2ef94366f8f12c6979 Mon Sep 17 00:00:00 2001 From: Carlos Correia <240402@epvc.ptm> Date: Thu, 9 Jul 2026 16:27:23 +0100 Subject: [PATCH] =?UTF-8?q?AJuste=20do=20quiz(posi=C3=A7=C3=A3o=20das=20pe?= =?UTF-8?q?rguntas)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/quiz/quiz1.dart | 720 ++++++++++++++++++++------------------------ 1 file changed, 333 insertions(+), 387 deletions(-) diff --git a/lib/quiz/quiz1.dart b/lib/quiz/quiz1.dart index d6b068b..523a468 100644 --- a/lib/quiz/quiz1.dart +++ b/lib/quiz/quiz1.dart @@ -3,7 +3,7 @@ import 'package:flutter/material.dart'; import 'quiz_question_screen.dart'; import 'quiz_result.dart'; -// Quiz 1: Face (Image-based) +// Quiz 1: Problemas respiratórios (Yes/No) class Quiz1Screen extends StatelessWidget { const Quiz1Screen({super.key, this.currentScore = 0, this.scopeId}); @@ -13,310 +13,7 @@ class Quiz1Screen extends StatelessWidget { @override Widget build(BuildContext context) { return QuizQuestionScreen( - title: 'Quiz 1/25', - category: 'Avaliação facial', - categoryIcon: Icons.face_rounded, - question: 'O rosto do seu filho/a se parece com o desta imagem?', - questionImagePaths: const ['assets/mockup_images/2.jpeg'], - suggestedYoutubeId: '', // TODO: colar o ID do YouTube do Episódio 1 - suggestedVideoTitle: 'Ver vídeo: Episódio 1', - answers: const [ - QuizAnswer( - title: 'Sim', - description: 'O rosto se assemelha à imagem', - weight: 2, - value: 'sim', - ), - QuizAnswer( - title: 'Não', - description: 'O rosto não se assemelha à imagem', - weight: 1, - value: 'nao', - ), - ], - currentScore: currentScore, - nextRoute: (context, nextScore) => MaterialPageRoute( - builder: (_) => Quiz2Screen(currentScore: nextScore, scopeId: scopeId), - ), - answerType: QuizAnswerType.yesNo, - showBackButton: false, - ); - } -} - -// Quiz 2: Boca (Image-based) -class Quiz2Screen extends StatelessWidget { - const Quiz2Screen({super.key, required this.currentScore, this.scopeId}); - - final int currentScore; - final String? scopeId; - - @override - Widget build(BuildContext context) { - return QuizQuestionScreen( - title: 'Quiz 2/25', - category: 'Avaliação facial', - categoryIcon: Icons.sentiment_neutral_rounded, - question: - 'A boca do seu filho/a fica habitualmente na posição desta imagem (entreaberta)?', - questionImagePaths: const ['assets/mockup_images/4.jpeg'], - suggestedYoutubeId: '', // TODO: colar o ID do YouTube do Episódio 2 - suggestedVideoTitle: 'Ver vídeo: Episódio 2', - answers: const [ - QuizAnswer( - title: 'Sim', - description: 'A boca fica habitualmente entreaberta', - weight: 2, - value: 'sim', - ), - QuizAnswer( - title: 'Não', - description: 'A boca fica habitualmente fechada', - weight: 1, - value: 'nao', - ), - ], - currentScore: currentScore, - nextRoute: (context, nextScore) => MaterialPageRoute( - builder: (_) => Quiz3Screen(currentScore: nextScore, scopeId: scopeId), - ), - answerType: QuizAnswerType.yesNo, - showBackButton: true, - ); - } -} - -// Quiz 3: Olheiras (Image-based) -class Quiz3Screen extends StatelessWidget { - const Quiz3Screen({super.key, required this.currentScore, this.scopeId}); - - final int currentScore; - final String? scopeId; - - @override - Widget build(BuildContext context) { - return QuizQuestionScreen( - title: 'Quiz 3/25', - category: 'Avaliação facial', - categoryIcon: Icons.visibility_rounded, - question: 'O seu filho/a tem olheiras semelhantes às desta imagem?', - questionImagePaths: const ['assets/mockup_images/8.jpeg'], - suggestedYoutubeId: '', // TODO: colar o ID do YouTube do Episódio 3 - suggestedVideoTitle: 'Ver vídeo: Episódio 3', - answers: const [ - QuizAnswer( - title: 'Sim', - description: 'Tem olheiras semelhantes à imagem', - weight: 2, - value: 'sim', - ), - QuizAnswer( - title: 'Não', - description: 'Não tem olheiras semelhantes à imagem', - weight: 1, - value: 'nao', - ), - ], - currentScore: currentScore, - nextRoute: (context, nextScore) => MaterialPageRoute( - builder: (_) => Quiz4Screen(currentScore: nextScore, scopeId: scopeId), - ), - answerType: QuizAnswerType.yesNo, - showBackButton: true, - ); - } -} - -// Quiz 4: Queixo (Image-based) -class Quiz4Screen extends StatelessWidget { - const Quiz4Screen({super.key, required this.currentScore, this.scopeId}); - - final int currentScore; - final String? scopeId; - - @override - Widget build(BuildContext context) { - return QuizQuestionScreen( - title: 'Quiz 4/25', - category: 'Avaliação facial', - categoryIcon: Icons.face_rounded, - question: - 'Com a boca fechada, o queixo do seu filho/a se parece com o desta imagem?', - questionImagePaths: const ['assets/mockup_images/6.jpeg'], - suggestedYoutubeId: '', // TODO: colar o ID do YouTube do Episódio 4 - suggestedVideoTitle: 'Ver vídeo: Episódio 4', - answers: const [ - QuizAnswer( - title: 'Sim', - description: 'O queixo se assemelha à imagem', - weight: 2, - value: 'sim', - ), - QuizAnswer( - title: 'Não', - description: 'O queixo não se assemelha à imagem', - weight: 1, - value: 'nao', - ), - ], - currentScore: currentScore, - nextRoute: (context, nextScore) => MaterialPageRoute( - builder: (_) => Quiz5Screen(currentScore: nextScore, scopeId: scopeId), - ), - answerType: QuizAnswerType.yesNo, - showBackButton: true, - ); - } -} - -// Quiz 5: Dentes em cima (Number input) -class Quiz5Screen extends StatelessWidget { - const Quiz5Screen({super.key, required this.currentScore, this.scopeId}); - - final int currentScore; - final String? scopeId; - - @override - Widget build(BuildContext context) { - return QuizQuestionScreen( - title: 'Quiz 5/25', - category: 'Contagem de dentes', - categoryIcon: Icons.numbers_rounded, - fallbackIcon: Icons.numbers_rounded, - fallbackColor: const Color(0xFF2F9E94), - question: 'Quantos dentes tem o seu filho/a em cima na boca?', - answers: const [], - currentScore: currentScore, - nextRoute: (context, nextScore) => MaterialPageRoute( - builder: (_) => Quiz6Screen(currentScore: nextScore, scopeId: scopeId), - ), - answerType: QuizAnswerType.number, - showBackButton: true, - ); - } -} - -// Quiz 6: Dentes em baixo (Number input) -class Quiz6Screen extends StatelessWidget { - const Quiz6Screen({super.key, required this.currentScore, this.scopeId}); - - final int currentScore; - final String? scopeId; - - @override - Widget build(BuildContext context) { - return QuizQuestionScreen( - title: 'Quiz 6/25', - category: 'Contagem de dentes', - categoryIcon: Icons.numbers_rounded, - fallbackIcon: Icons.numbers_rounded, - fallbackColor: const Color(0xFF2F9E94), - question: 'Quantos dentes tem o seu filho/a em baixo na boca?', - answers: const [], - currentScore: currentScore, - nextRoute: (context, nextScore) => MaterialPageRoute( - builder: (_) => Quiz7Screen(currentScore: nextScore, scopeId: scopeId), - ), - answerType: QuizAnswerType.number, - showBackButton: true, - ); - } -} - -// Quiz 7: Boca (Image-based) -class Quiz7Screen extends StatelessWidget { - const Quiz7Screen({super.key, required this.currentScore, this.scopeId}); - - final int currentScore; - final String? scopeId; - - @override - Widget build(BuildContext context) { - return QuizQuestionScreen( - title: 'Quiz 7/25', - category: 'Avaliação facial', - categoryIcon: Icons.sentiment_neutral_rounded, - question: 'A boca do seu filho/a se parece com a desta imagem?', - questionImagePaths: const ['assets/mockup_images/14.jpeg'], - suggestedYoutubeId: '', // TODO: colar o ID do YouTube do Episódio 5 - suggestedVideoTitle: 'Ver vídeo: Episódio 5', - answers: const [ - QuizAnswer( - title: 'Sim', - description: 'A boca se assemelha à imagem', - weight: 2, - value: 'sim', - ), - QuizAnswer( - title: 'Não', - description: 'A boca não se assemelha à imagem', - weight: 1, - value: 'nao', - ), - ], - currentScore: currentScore, - nextRoute: (context, nextScore) => MaterialPageRoute( - builder: (_) => Quiz8Screen(currentScore: nextScore, scopeId: scopeId), - ), - answerType: QuizAnswerType.yesNo, - showBackButton: true, - ); - } -} - -// Quiz 8: Freio (Image-based) -class Quiz8Screen extends StatelessWidget { - const Quiz8Screen({super.key, required this.currentScore, this.scopeId}); - - final int currentScore; - final String? scopeId; - - @override - Widget build(BuildContext context) { - return QuizQuestionScreen( - title: 'Quiz 8/25', - category: 'Avaliação facial', - categoryIcon: Icons.record_voice_over_rounded, - question: - 'O frénulo (freio) da língua do seu filho/a se parece com o desta imagem?', - questionImagePaths: const ['assets/mockup_images/17.png'], - suggestedYoutubeId: '', // TODO: colar o ID do YouTube do Episódio 6 - suggestedVideoTitle: 'Ver vídeo: Episódio 6', - answers: const [ - QuizAnswer( - title: 'Sim', - description: 'O frénulo se assemelha à imagem', - weight: 2, - value: 'sim', - ), - QuizAnswer( - title: 'Não', - description: 'O frénulo não se assemelha à imagem', - weight: 1, - value: 'nao', - ), - ], - currentScore: currentScore, - nextRoute: (context, nextScore) => MaterialPageRoute( - builder: (_) => Quiz9Screen(currentScore: nextScore, scopeId: scopeId), - ), - answerType: QuizAnswerType.yesNo, - showBackButton: true, - ); - } -} - -// Quiz 9: Problemas respiratórios (Yes/No) -class Quiz9Screen extends StatelessWidget { - const Quiz9Screen({super.key, required this.currentScore, this.scopeId}); - - final int currentScore; - final String? scopeId; - - @override - Widget build(BuildContext context) { - return QuizQuestionScreen( - title: 'Quiz 9/25', + title: 'Quiz 1/23', category: 'Saúde respiratória', categoryIcon: Icons.medical_information_rounded, fallbackIcon: Icons.medical_information_rounded, @@ -344,17 +41,17 @@ class Quiz9Screen extends StatelessWidget { ], currentScore: currentScore, nextRoute: (context, nextScore) => MaterialPageRoute( - builder: (_) => Quiz10Screen(currentScore: nextScore, scopeId: scopeId), + builder: (_) => Quiz2Screen(currentScore: nextScore, scopeId: scopeId), ), answerType: QuizAnswerType.yesNo, - showBackButton: true, + showBackButton: false, ); } } -// Quiz 10: Respira pela boca (Yes/No) -class Quiz10Screen extends StatelessWidget { - const Quiz10Screen({super.key, required this.currentScore, this.scopeId}); +// Quiz 2: Respira pela boca (Yes/No) +class Quiz2Screen extends StatelessWidget { + const Quiz2Screen({super.key, required this.currentScore, this.scopeId}); final int currentScore; final String? scopeId; @@ -362,7 +59,7 @@ class Quiz10Screen extends StatelessWidget { @override Widget build(BuildContext context) { return QuizQuestionScreen( - title: 'Quiz 10/25', + title: 'Quiz 2/23', category: 'Respiração', categoryIcon: Icons.air_rounded, fallbackIcon: Icons.air_rounded, @@ -390,7 +87,7 @@ class Quiz10Screen extends StatelessWidget { ], currentScore: currentScore, nextRoute: (context, nextScore) => MaterialPageRoute( - builder: (_) => Quiz11Screen(currentScore: nextScore, scopeId: scopeId), + builder: (_) => Quiz3Screen(currentScore: nextScore, scopeId: scopeId), ), answerType: QuizAnswerType.yesNo, showBackButton: true, @@ -398,9 +95,9 @@ class Quiz10Screen extends StatelessWidget { } } -// Quiz 11: Ressonar (Yes/No) -class Quiz11Screen extends StatelessWidget { - const Quiz11Screen({super.key, required this.currentScore, this.scopeId}); +// Quiz 3: Ressonar (Yes/No) +class Quiz3Screen extends StatelessWidget { + const Quiz3Screen({super.key, required this.currentScore, this.scopeId}); final int currentScore; final String? scopeId; @@ -408,7 +105,7 @@ class Quiz11Screen extends StatelessWidget { @override Widget build(BuildContext context) { return QuizQuestionScreen( - title: 'Quiz 11/25', + title: 'Quiz 3/23', category: 'Sono', categoryIcon: Icons.bedtime_rounded, fallbackIcon: Icons.bedtime_rounded, @@ -436,7 +133,7 @@ class Quiz11Screen extends StatelessWidget { ], currentScore: currentScore, nextRoute: (context, nextScore) => MaterialPageRoute( - builder: (_) => Quiz12Screen(currentScore: nextScore, scopeId: scopeId), + builder: (_) => Quiz4Screen(currentScore: nextScore, scopeId: scopeId), ), answerType: QuizAnswerType.yesNo, showBackButton: true, @@ -444,9 +141,9 @@ class Quiz11Screen extends StatelessWidget { } } -// Quiz 12: Nariz tapado (Yes/No) -class Quiz12Screen extends StatelessWidget { - const Quiz12Screen({super.key, required this.currentScore, this.scopeId}); +// Quiz 4: Nariz tapado (Yes/No) +class Quiz4Screen extends StatelessWidget { + const Quiz4Screen({super.key, required this.currentScore, this.scopeId}); final int currentScore; final String? scopeId; @@ -454,7 +151,7 @@ class Quiz12Screen extends StatelessWidget { @override Widget build(BuildContext context) { return QuizQuestionScreen( - title: 'Quiz 12/25', + title: 'Quiz 4/23', category: 'Respiração', categoryIcon: Icons.sick_rounded, fallbackIcon: Icons.sick_rounded, @@ -482,7 +179,7 @@ class Quiz12Screen extends StatelessWidget { ], currentScore: currentScore, nextRoute: (context, nextScore) => MaterialPageRoute( - builder: (_) => Quiz13Screen(currentScore: nextScore, scopeId: scopeId), + builder: (_) => Quiz5Screen(currentScore: nextScore, scopeId: scopeId), ), answerType: QuizAnswerType.yesNo, showBackButton: true, @@ -490,9 +187,9 @@ class Quiz12Screen extends StatelessWidget { } } -// Quiz 13: Interrupções respiração (Yes/No) -class Quiz13Screen extends StatelessWidget { - const Quiz13Screen({super.key, required this.currentScore, this.scopeId}); +// Quiz 5: Interrupções respiração (Yes/No) +class Quiz5Screen extends StatelessWidget { + const Quiz5Screen({super.key, required this.currentScore, this.scopeId}); final int currentScore; final String? scopeId; @@ -500,7 +197,7 @@ class Quiz13Screen extends StatelessWidget { @override Widget build(BuildContext context) { return QuizQuestionScreen( - title: 'Quiz 13/25', + title: 'Quiz 5/23', category: 'Sono', categoryIcon: Icons.nights_stay_rounded, fallbackIcon: Icons.nights_stay_rounded, @@ -530,7 +227,7 @@ class Quiz13Screen extends StatelessWidget { ], currentScore: currentScore, nextRoute: (context, nextScore) => MaterialPageRoute( - builder: (_) => Quiz14Screen(currentScore: nextScore, scopeId: scopeId), + builder: (_) => Quiz6Screen(currentScore: nextScore, scopeId: scopeId), ), answerType: QuizAnswerType.yesNo, showBackButton: true, @@ -538,9 +235,9 @@ class Quiz13Screen extends StatelessWidget { } } -// Quiz 14: Range os dentes (Yes/No) -class Quiz14Screen extends StatelessWidget { - const Quiz14Screen({super.key, required this.currentScore, this.scopeId}); +// Quiz 6: Range os dentes (Yes/No) +class Quiz6Screen extends StatelessWidget { + const Quiz6Screen({super.key, required this.currentScore, this.scopeId}); final int currentScore; final String? scopeId; @@ -548,7 +245,7 @@ class Quiz14Screen extends StatelessWidget { @override Widget build(BuildContext context) { return QuizQuestionScreen( - title: 'Quiz 14/25', + title: 'Quiz 6/23', category: 'Hábitos noturnos', categoryIcon: Icons.nights_stay_rounded, fallbackIcon: Icons.nights_stay_rounded, @@ -576,7 +273,7 @@ class Quiz14Screen extends StatelessWidget { ], currentScore: currentScore, nextRoute: (context, nextScore) => MaterialPageRoute( - builder: (_) => Quiz15Screen(currentScore: nextScore, scopeId: scopeId), + builder: (_) => Quiz7Screen(currentScore: nextScore, scopeId: scopeId), ), answerType: QuizAnswerType.yesNo, showBackButton: true, @@ -584,9 +281,9 @@ class Quiz14Screen extends StatelessWidget { } } -// Quiz 15: Alergias sazonais (Yes/No) -class Quiz15Screen extends StatelessWidget { - const Quiz15Screen({super.key, required this.currentScore, this.scopeId}); +// Quiz 7: Alergias sazonais (Yes/No) +class Quiz7Screen extends StatelessWidget { + const Quiz7Screen({super.key, required this.currentScore, this.scopeId}); final int currentScore; final String? scopeId; @@ -594,7 +291,7 @@ class Quiz15Screen extends StatelessWidget { @override Widget build(BuildContext context) { return QuizQuestionScreen( - title: 'Quiz 15/25', + title: 'Quiz 7/23', category: 'Saúde geral', categoryIcon: Icons.local_florist_rounded, fallbackIcon: Icons.local_florist_rounded, @@ -622,7 +319,7 @@ class Quiz15Screen extends StatelessWidget { ], currentScore: currentScore, nextRoute: (context, nextScore) => MaterialPageRoute( - builder: (_) => Quiz16Screen(currentScore: nextScore, scopeId: scopeId), + builder: (_) => Quiz8Screen(currentScore: nextScore, scopeId: scopeId), ), answerType: QuizAnswerType.yesNo, showBackButton: true, @@ -630,9 +327,9 @@ class Quiz15Screen extends StatelessWidget { } } -// Quiz 16: Saliva seca (Yes/No) -class Quiz16Screen extends StatelessWidget { - const Quiz16Screen({super.key, required this.currentScore, this.scopeId}); +// Quiz 8: Saliva seca (Yes/No) +class Quiz8Screen extends StatelessWidget { + const Quiz8Screen({super.key, required this.currentScore, this.scopeId}); final int currentScore; final String? scopeId; @@ -640,7 +337,7 @@ class Quiz16Screen extends StatelessWidget { @override Widget build(BuildContext context) { return QuizQuestionScreen( - title: 'Quiz 16/25', + title: 'Quiz 8/23', category: 'Sono', categoryIcon: Icons.water_drop_rounded, fallbackIcon: Icons.water_drop_rounded, @@ -668,7 +365,7 @@ class Quiz16Screen extends StatelessWidget { ], currentScore: currentScore, nextRoute: (context, nextScore) => MaterialPageRoute( - builder: (_) => Quiz17Screen(currentScore: nextScore, scopeId: scopeId), + builder: (_) => Quiz9Screen(currentScore: nextScore, scopeId: scopeId), ), answerType: QuizAnswerType.yesNo, showBackButton: true, @@ -676,9 +373,9 @@ class Quiz16Screen extends StatelessWidget { } } -// Quiz 17: Otites (Yes/No) -class Quiz17Screen extends StatelessWidget { - const Quiz17Screen({super.key, required this.currentScore, this.scopeId}); +// Quiz 9: Otites (Yes/No) +class Quiz9Screen extends StatelessWidget { + const Quiz9Screen({super.key, required this.currentScore, this.scopeId}); final int currentScore; final String? scopeId; @@ -686,7 +383,7 @@ class Quiz17Screen extends StatelessWidget { @override Widget build(BuildContext context) { return QuizQuestionScreen( - title: 'Quiz 17/25', + title: 'Quiz 9/23', category: 'Saúde geral', categoryIcon: Icons.hearing_rounded, fallbackIcon: Icons.hearing_rounded, @@ -714,7 +411,7 @@ class Quiz17Screen extends StatelessWidget { ], currentScore: currentScore, nextRoute: (context, nextScore) => MaterialPageRoute( - builder: (_) => Quiz18Screen(currentScore: nextScore, scopeId: scopeId), + builder: (_) => Quiz10Screen(currentScore: nextScore, scopeId: scopeId), ), answerType: QuizAnswerType.yesNo, showBackButton: true, @@ -722,9 +419,9 @@ class Quiz17Screen extends StatelessWidget { } } -// Quiz 18: Amigdalites (Yes/No) -class Quiz18Screen extends StatelessWidget { - const Quiz18Screen({super.key, required this.currentScore, this.scopeId}); +// Quiz 10: Amigdalites (Yes/No) +class Quiz10Screen extends StatelessWidget { + const Quiz10Screen({super.key, required this.currentScore, this.scopeId}); final int currentScore; final String? scopeId; @@ -732,7 +429,7 @@ class Quiz18Screen extends StatelessWidget { @override Widget build(BuildContext context) { return QuizQuestionScreen( - title: 'Quiz 18/25', + title: 'Quiz 10/23', category: 'Saúde geral', categoryIcon: Icons.healing_rounded, fallbackIcon: Icons.healing_rounded, @@ -760,7 +457,7 @@ class Quiz18Screen extends StatelessWidget { ], currentScore: currentScore, nextRoute: (context, nextScore) => MaterialPageRoute( - builder: (_) => Quiz19Screen(currentScore: nextScore, scopeId: scopeId), + builder: (_) => Quiz11Screen(currentScore: nextScore, scopeId: scopeId), ), answerType: QuizAnswerType.yesNo, showBackButton: true, @@ -768,9 +465,9 @@ class Quiz18Screen extends StatelessWidget { } } -// Quiz 19: Bronquiolites (Yes/No) -class Quiz19Screen extends StatelessWidget { - const Quiz19Screen({super.key, required this.currentScore, this.scopeId}); +// Quiz 11: Bronquiolites (Yes/No) +class Quiz11Screen extends StatelessWidget { + const Quiz11Screen({super.key, required this.currentScore, this.scopeId}); final int currentScore; final String? scopeId; @@ -778,7 +475,7 @@ class Quiz19Screen extends StatelessWidget { @override Widget build(BuildContext context) { return QuizQuestionScreen( - title: 'Quiz 19/25', + title: 'Quiz 11/23', category: 'Saúde respiratória', categoryIcon: Icons.air_rounded, fallbackIcon: Icons.air_rounded, @@ -807,7 +504,7 @@ class Quiz19Screen extends StatelessWidget { ], currentScore: currentScore, nextRoute: (context, nextScore) => MaterialPageRoute( - builder: (_) => Quiz20Screen(currentScore: nextScore, scopeId: scopeId), + builder: (_) => Quiz12Screen(currentScore: nextScore, scopeId: scopeId), ), answerType: QuizAnswerType.yesNo, showBackButton: true, @@ -815,9 +512,9 @@ class Quiz19Screen extends StatelessWidget { } } -// Quiz 20: Dificuldades a mastigar (Yes/No) -class Quiz20Screen extends StatelessWidget { - const Quiz20Screen({super.key, required this.currentScore, this.scopeId}); +// Quiz 12: Dificuldades a mastigar (Yes/No) +class Quiz12Screen extends StatelessWidget { + const Quiz12Screen({super.key, required this.currentScore, this.scopeId}); final int currentScore; final String? scopeId; @@ -825,7 +522,7 @@ class Quiz20Screen extends StatelessWidget { @override Widget build(BuildContext context) { return QuizQuestionScreen( - title: 'Quiz 20/25', + title: 'Quiz 12/23', category: 'Hábitos alimentares', categoryIcon: Icons.restaurant_rounded, fallbackIcon: Icons.restaurant_rounded, @@ -853,7 +550,7 @@ class Quiz20Screen extends StatelessWidget { ], currentScore: currentScore, nextRoute: (context, nextScore) => MaterialPageRoute( - builder: (_) => Quiz21Screen(currentScore: nextScore, scopeId: scopeId), + builder: (_) => Quiz13Screen(currentScore: nextScore, scopeId: scopeId), ), answerType: QuizAnswerType.yesNo, showBackButton: true, @@ -861,9 +558,9 @@ class Quiz20Screen extends StatelessWidget { } } -// Quiz 21: Lento a comer (Yes/No) -class Quiz21Screen extends StatelessWidget { - const Quiz21Screen({super.key, required this.currentScore, this.scopeId}); +// Quiz 13: Lento a comer (Yes/No) +class Quiz13Screen extends StatelessWidget { + const Quiz13Screen({super.key, required this.currentScore, this.scopeId}); final int currentScore; final String? scopeId; @@ -871,7 +568,7 @@ class Quiz21Screen extends StatelessWidget { @override Widget build(BuildContext context) { return QuizQuestionScreen( - title: 'Quiz 21/25', + title: 'Quiz 13/23', category: 'Hábitos alimentares', categoryIcon: Icons.schedule_rounded, fallbackIcon: Icons.schedule_rounded, @@ -899,7 +596,7 @@ class Quiz21Screen extends StatelessWidget { ], currentScore: currentScore, nextRoute: (context, nextScore) => MaterialPageRoute( - builder: (_) => Quiz22Screen(currentScore: nextScore, scopeId: scopeId), + builder: (_) => Quiz14Screen(currentScore: nextScore, scopeId: scopeId), ), answerType: QuizAnswerType.yesNo, showBackButton: true, @@ -907,9 +604,9 @@ class Quiz21Screen extends StatelessWidget { } } -// Quiz 22: Prefere alimentos moles (Yes/No) -class Quiz22Screen extends StatelessWidget { - const Quiz22Screen({super.key, required this.currentScore, this.scopeId}); +// Quiz 14: Prefere alimentos moles (Yes/No) +class Quiz14Screen extends StatelessWidget { + const Quiz14Screen({super.key, required this.currentScore, this.scopeId}); final int currentScore; final String? scopeId; @@ -917,7 +614,7 @@ class Quiz22Screen extends StatelessWidget { @override Widget build(BuildContext context) { return QuizQuestionScreen( - title: 'Quiz 22/25', + title: 'Quiz 14/23', category: 'Hábitos alimentares', categoryIcon: Icons.restaurant_menu_rounded, fallbackIcon: Icons.restaurant_menu_rounded, @@ -945,7 +642,7 @@ class Quiz22Screen extends StatelessWidget { ], currentScore: currentScore, nextRoute: (context, nextScore) => MaterialPageRoute( - builder: (_) => Quiz23Screen(currentScore: nextScore, scopeId: scopeId), + builder: (_) => Quiz15Screen(currentScore: nextScore, scopeId: scopeId), ), answerType: QuizAnswerType.yesNo, showBackButton: true, @@ -953,9 +650,9 @@ class Quiz22Screen extends StatelessWidget { } } -// Quiz 23: Alimentado por biberão (Yes/No) -class Quiz23Screen extends StatelessWidget { - const Quiz23Screen({super.key, required this.currentScore, this.scopeId}); +// Quiz 15: Alimentado por biberão (Yes/No) +class Quiz15Screen extends StatelessWidget { + const Quiz15Screen({super.key, required this.currentScore, this.scopeId}); final int currentScore; final String? scopeId; @@ -963,7 +660,7 @@ class Quiz23Screen extends StatelessWidget { @override Widget build(BuildContext context) { return QuizQuestionScreen( - title: 'Quiz 23/25', + title: 'Quiz 15/23', category: 'Hábitos alimentares', categoryIcon: Icons.local_drink_rounded, fallbackIcon: Icons.local_drink_rounded, @@ -991,7 +688,7 @@ class Quiz23Screen extends StatelessWidget { ], currentScore: currentScore, nextRoute: (context, nextScore) => MaterialPageRoute( - builder: (_) => Quiz24Screen(currentScore: nextScore, scopeId: scopeId), + builder: (_) => Quiz16Screen(currentScore: nextScore, scopeId: scopeId), ), answerType: QuizAnswerType.yesNo, showBackButton: true, @@ -999,9 +696,9 @@ class Quiz23Screen extends StatelessWidget { } } -// Quiz 24: Chupeta (Yes/No) -class Quiz24Screen extends StatelessWidget { - const Quiz24Screen({super.key, required this.currentScore, this.scopeId}); +// Quiz 16: Chupeta (Yes/No) +class Quiz16Screen extends StatelessWidget { + const Quiz16Screen({super.key, required this.currentScore, this.scopeId}); final int currentScore; final String? scopeId; @@ -1009,7 +706,7 @@ class Quiz24Screen extends StatelessWidget { @override Widget build(BuildContext context) { return QuizQuestionScreen( - title: 'Quiz 24/25', + title: 'Quiz 16/23', category: 'Hábitos orais', categoryIcon: Icons.child_care_rounded, fallbackIcon: Icons.child_care_rounded, @@ -1037,7 +734,7 @@ class Quiz24Screen extends StatelessWidget { ], currentScore: currentScore, nextRoute: (context, nextScore) => MaterialPageRoute( - builder: (_) => Quiz25Screen(currentScore: nextScore, scopeId: scopeId), + builder: (_) => Quiz17Screen(currentScore: nextScore, scopeId: scopeId), ), answerType: QuizAnswerType.yesNo, showBackButton: true, @@ -1045,9 +742,9 @@ class Quiz24Screen extends StatelessWidget { } } -// Quiz 25: Chucha o dedo (Yes/No) -class Quiz25Screen extends StatelessWidget { - const Quiz25Screen({super.key, required this.currentScore, this.scopeId}); +// Quiz 17: Chucha o dedo (Yes/No) +class Quiz17Screen extends StatelessWidget { + const Quiz17Screen({super.key, required this.currentScore, this.scopeId}); final int currentScore; final String? scopeId; @@ -1055,7 +752,7 @@ class Quiz25Screen extends StatelessWidget { @override Widget build(BuildContext context) { return QuizQuestionScreen( - title: 'Quiz 25/25', + title: 'Quiz 17/23', category: 'Hábitos orais', categoryIcon: Icons.back_hand_rounded, fallbackIcon: Icons.back_hand_rounded, @@ -1082,10 +779,259 @@ class Quiz25Screen extends StatelessWidget { ), ], currentScore: currentScore, + nextRoute: (context, nextScore) => MaterialPageRoute( + builder: (_) => Quiz18Screen(currentScore: nextScore, scopeId: scopeId), + ), + answerType: QuizAnswerType.yesNo, + showBackButton: true, + ); + } +} + +// Quiz 18: Face (Image-based) +class Quiz18Screen extends StatelessWidget { + const Quiz18Screen({super.key, required this.currentScore, this.scopeId}); + + final int currentScore; + final String? scopeId; + + @override + Widget build(BuildContext context) { + return QuizQuestionScreen( + title: 'Quiz 18/23', + category: 'Avaliação facial', + categoryIcon: Icons.face_rounded, + question: 'O rosto do seu filho/a se parece com o desta imagem?', + questionImagePaths: const ['assets/mockup_images/2.jpeg'], + suggestedYoutubeId: '', // TODO: colar o ID do YouTube do Episódio 1 + suggestedVideoTitle: 'Ver vídeo: Episódio 1', + answers: const [ + QuizAnswer( + title: 'Sim', + description: 'O rosto se assemelha à imagem', + weight: 2, + value: 'sim', + ), + QuizAnswer( + title: 'Não', + description: 'O rosto não se assemelha à imagem', + weight: 1, + value: 'nao', + ), + ], + currentScore: currentScore, + nextRoute: (context, nextScore) => MaterialPageRoute( + builder: (_) => Quiz19Screen(currentScore: nextScore, scopeId: scopeId), + ), + answerType: QuizAnswerType.yesNo, + showBackButton: true, + ); + } +} + +// Quiz 19: Boca (Image-based) +class Quiz19Screen extends StatelessWidget { + const Quiz19Screen({super.key, required this.currentScore, this.scopeId}); + + final int currentScore; + final String? scopeId; + + @override + Widget build(BuildContext context) { + return QuizQuestionScreen( + title: 'Quiz 19/23', + category: 'Avaliação facial', + categoryIcon: Icons.sentiment_neutral_rounded, + question: + 'A boca do seu filho/a fica habitualmente na posição desta imagem (entreaberta)?', + questionImagePaths: const ['assets/mockup_images/4.jpeg'], + suggestedYoutubeId: '', // TODO: colar o ID do YouTube do Episódio 2 + suggestedVideoTitle: 'Ver vídeo: Episódio 2', + answers: const [ + QuizAnswer( + title: 'Sim', + description: 'A boca fica habitualmente entreaberta', + weight: 2, + value: 'sim', + ), + QuizAnswer( + title: 'Não', + description: 'A boca fica habitualmente fechada', + weight: 1, + value: 'nao', + ), + ], + currentScore: currentScore, + nextRoute: (context, nextScore) => MaterialPageRoute( + builder: (_) => Quiz20Screen(currentScore: nextScore, scopeId: scopeId), + ), + answerType: QuizAnswerType.yesNo, + showBackButton: true, + ); + } +} + +// Quiz 20: Olheiras (Image-based) +class Quiz20Screen extends StatelessWidget { + const Quiz20Screen({super.key, required this.currentScore, this.scopeId}); + + final int currentScore; + final String? scopeId; + + @override + Widget build(BuildContext context) { + return QuizQuestionScreen( + title: 'Quiz 20/23', + category: 'Avaliação facial', + categoryIcon: Icons.visibility_rounded, + question: 'O seu filho/a tem olheiras semelhantes às desta imagem?', + questionImagePaths: const ['assets/mockup_images/8.jpeg'], + suggestedYoutubeId: '', // TODO: colar o ID do YouTube do Episódio 3 + suggestedVideoTitle: 'Ver vídeo: Episódio 3', + answers: const [ + QuizAnswer( + title: 'Sim', + description: 'Tem olheiras semelhantes à imagem', + weight: 2, + value: 'sim', + ), + QuizAnswer( + title: 'Não', + description: 'Não tem olheiras semelhantes à imagem', + weight: 1, + value: 'nao', + ), + ], + currentScore: currentScore, + nextRoute: (context, nextScore) => MaterialPageRoute( + builder: (_) => Quiz21Screen(currentScore: nextScore, scopeId: scopeId), + ), + answerType: QuizAnswerType.yesNo, + showBackButton: true, + ); + } +} + +// Quiz 21: Queixo (Image-based) +class Quiz21Screen extends StatelessWidget { + const Quiz21Screen({super.key, required this.currentScore, this.scopeId}); + + final int currentScore; + final String? scopeId; + + @override + Widget build(BuildContext context) { + return QuizQuestionScreen( + title: 'Quiz 21/23', + category: 'Avaliação facial', + categoryIcon: Icons.face_rounded, + question: + 'Com a boca fechada, o queixo do seu filho/a se parece com o desta imagem?', + questionImagePaths: const ['assets/mockup_images/6.jpeg'], + suggestedYoutubeId: '', // TODO: colar o ID do YouTube do Episódio 4 + suggestedVideoTitle: 'Ver vídeo: Episódio 4', + answers: const [ + QuizAnswer( + title: 'Sim', + description: 'O queixo se assemelha à imagem', + weight: 2, + value: 'sim', + ), + QuizAnswer( + title: 'Não', + description: 'O queixo não se assemelha à imagem', + weight: 1, + value: 'nao', + ), + ], + currentScore: currentScore, + nextRoute: (context, nextScore) => MaterialPageRoute( + builder: (_) => Quiz22Screen(currentScore: nextScore, scopeId: scopeId), + ), + answerType: QuizAnswerType.yesNo, + showBackButton: true, + ); + } +} + +// Quiz 22: Boca (Image-based) +class Quiz22Screen extends StatelessWidget { + const Quiz22Screen({super.key, required this.currentScore, this.scopeId}); + + final int currentScore; + final String? scopeId; + + @override + Widget build(BuildContext context) { + return QuizQuestionScreen( + title: 'Quiz 22/23', + category: 'Avaliação facial', + categoryIcon: Icons.sentiment_neutral_rounded, + question: 'A boca do seu filho/a se parece com a desta imagem?', + questionImagePaths: const ['assets/mockup_images/14.jpeg'], + suggestedYoutubeId: '', // TODO: colar o ID do YouTube do Episódio 5 + suggestedVideoTitle: 'Ver vídeo: Episódio 5', + answers: const [ + QuizAnswer( + title: 'Sim', + description: 'A boca se assemelha à imagem', + weight: 2, + value: 'sim', + ), + QuizAnswer( + title: 'Não', + description: 'A boca não se assemelha à imagem', + weight: 1, + value: 'nao', + ), + ], + currentScore: currentScore, + nextRoute: (context, nextScore) => MaterialPageRoute( + builder: (_) => Quiz23Screen(currentScore: nextScore, scopeId: scopeId), + ), + answerType: QuizAnswerType.yesNo, + showBackButton: true, + ); + } +} + +// Quiz 23: Freio (Image-based) +class Quiz23Screen extends StatelessWidget { + const Quiz23Screen({super.key, required this.currentScore, this.scopeId}); + + final int currentScore; + final String? scopeId; + + @override + Widget build(BuildContext context) { + return QuizQuestionScreen( + title: 'Quiz 23/23', + category: 'Avaliação facial', + categoryIcon: Icons.record_voice_over_rounded, + question: + 'O frénulo (freio) da língua do seu filho/a se parece com o desta imagem?', + questionImagePaths: const ['assets/mockup_images/17.png'], + suggestedYoutubeId: '', // TODO: colar o ID do YouTube do Episódio 6 + suggestedVideoTitle: 'Ver vídeo: Episódio 6', + answers: const [ + QuizAnswer( + title: 'Sim', + description: 'O frénulo se assemelha à imagem', + weight: 2, + value: 'sim', + ), + QuizAnswer( + title: 'Não', + description: 'O frénulo não se assemelha à imagem', + weight: 1, + value: 'nao', + ), + ], + currentScore: currentScore, nextRoute: (context, nextScore) => MaterialPageRoute( builder: (_) => QuizResultScreen( finalScore: nextScore, - maxScore: 130, + maxScore: 46, scopeId: scopeId, ), ),