Atualização geral de optimazação e desing

This commit is contained in:
Carlos Correia
2026-07-07 11:41:15 +01:00
parent e8afe36cd2
commit a8e04ceeb2
37 changed files with 1688 additions and 2900 deletions

View File

@@ -14,43 +14,29 @@ class Quiz1Screen extends StatelessWidget {
Widget build(BuildContext context) {
return QuizQuestionScreen(
title: 'Quiz 1/26',
question:
'Qual das seguintes imagens se assemelha à face do seu filho/a?',
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: 'Opção A',
description:
'Selecione se a imagem se assemelha à face do seu filho/a',
title: 'Sim',
description: 'O rosto se assemelha à imagem',
weight: 2,
imagePath: 'assets/images/face_a.png',
value: 'sim',
),
QuizAnswer(
title: 'Opção B',
description:
'Selecione se a imagem se assemelha à face do seu filho/a',
weight: 2,
imagePath: 'assets/images/face_b.png',
),
QuizAnswer(
title: 'Opção C',
description:
'Selecione se a imagem se assemelha à face do seu filho/a',
weight: 2,
imagePath: 'assets/images/face_c.png',
),
QuizAnswer(
title: 'Opção D',
description:
'Selecione se a imagem se assemelha à face do seu filho/a',
weight: 2,
imagePath: 'assets/images/face_d.png',
title: 'Não',
description: 'O rosto não se assemelha à imagem',
weight: 1,
value: 'nao',
),
],
currentScore: currentScore,
nextRoute: (context, nextScore) => MaterialPageRoute<void>(
builder: (_) => Quiz2Screen(currentScore: nextScore, scopeId: scopeId),
),
answerType: QuizAnswerType.image,
answerType: QuizAnswerType.yesNo,
showBackButton: false,
);
}
@@ -68,42 +54,29 @@ class Quiz2Screen extends StatelessWidget {
return QuizQuestionScreen(
title: 'Quiz 2/26',
question:
'Qual das seguintes imagens se assemelha à boca do seu filho/a?',
'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: 'Opção A',
description:
'Selecione se a imagem se assemelha à boca do seu filho/a',
title: 'Sim',
description: 'A boca fica habitualmente entreaberta',
weight: 2,
imagePath: 'assets/images/mouth_a.png',
value: 'sim',
),
QuizAnswer(
title: 'Opção B',
description:
'Selecione se a imagem se assemelha à boca do seu filho/a',
weight: 2,
imagePath: 'assets/images/mouth_b.png',
),
QuizAnswer(
title: 'Opção C',
description:
'Selecione se a imagem se assemelha à boca do seu filho/a',
weight: 2,
imagePath: 'assets/images/mouth_c.png',
),
QuizAnswer(
title: 'Opção D',
description:
'Selecione se a imagem se assemelha à boca do seu filho/a',
weight: 2,
imagePath: 'assets/images/mouth_d.png',
title: 'Não',
description: 'A boca fica habitualmente fechada',
weight: 1,
value: 'nao',
),
],
currentScore: currentScore,
nextRoute: (context, nextScore) => MaterialPageRoute<void>(
builder: (_) => Quiz3Screen(currentScore: nextScore, scopeId: scopeId),
),
answerType: QuizAnswerType.image,
answerType: QuizAnswerType.yesNo,
showBackButton: true,
);
}
@@ -120,43 +93,29 @@ class Quiz3Screen extends StatelessWidget {
Widget build(BuildContext context) {
return QuizQuestionScreen(
title: 'Quiz 3/26',
question:
'Qual das seguintes imagens se assemelha às olheiras do seu filho/a?',
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: 'Opção A',
description:
'Selecione se a imagem se assemelha às olheiras do seu filho/a',
title: 'Sim',
description: 'Tem olheiras semelhantes à imagem',
weight: 2,
imagePath: 'assets/images/dark_circles_a.png',
value: 'sim',
),
QuizAnswer(
title: 'Opção B',
description:
'Selecione se a imagem se assemelha às olheiras do seu filho/a',
weight: 2,
imagePath: 'assets/images/dark_circles_b.png',
),
QuizAnswer(
title: 'Opção C',
description:
'Selecione se a imagem se assemelha às olheiras do seu filho/a',
weight: 2,
imagePath: 'assets/images/dark_circles_c.png',
),
QuizAnswer(
title: 'Opção D',
description:
'Selecione se a imagem se assemelha às olheiras do seu filho/a',
weight: 2,
imagePath: 'assets/images/dark_circles_d.png',
title: 'Não',
description: 'Não tem olheiras semelhantes à imagem',
weight: 1,
value: 'nao',
),
],
currentScore: currentScore,
nextRoute: (context, nextScore) => MaterialPageRoute<void>(
builder: (_) => Quiz4Screen(currentScore: nextScore, scopeId: scopeId),
),
answerType: QuizAnswerType.image,
answerType: QuizAnswerType.yesNo,
showBackButton: true,
);
}
@@ -174,42 +133,29 @@ class Quiz4Screen extends StatelessWidget {
return QuizQuestionScreen(
title: 'Quiz 4/26',
question:
'Qual das seguintes imagens se assemelha ao queixo do seu filho/a com a boca fechada?',
'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: 'Opção A',
description:
'Selecione se a imagem se assemelha ao queixo do seu filho/a',
title: 'Sim',
description: 'O queixo se assemelha à imagem',
weight: 2,
imagePath: 'assets/images/chin_a.png',
value: 'sim',
),
QuizAnswer(
title: 'Opção B',
description:
'Selecione se a imagem se assemelha ao queixo do seu filho/a',
weight: 2,
imagePath: 'assets/images/chin_b.png',
),
QuizAnswer(
title: 'Opção C',
description:
'Selecione se a imagem se assemelha ao queixo do seu filho/a',
weight: 2,
imagePath: 'assets/images/chin_c.png',
),
QuizAnswer(
title: 'Opção D',
description:
'Selecione se a imagem se assemelha ao queixo do seu filho/a',
weight: 2,
imagePath: 'assets/images/chin_d.png',
title: 'Não',
description: 'O queixo não se assemelha à imagem',
weight: 1,
value: 'nao',
),
],
currentScore: currentScore,
nextRoute: (context, nextScore) => MaterialPageRoute<void>(
builder: (_) => Quiz5Screen(currentScore: nextScore, scopeId: scopeId),
),
answerType: QuizAnswerType.image,
answerType: QuizAnswerType.yesNo,
showBackButton: true,
);
}
@@ -272,43 +218,29 @@ class Quiz7Screen extends StatelessWidget {
Widget build(BuildContext context) {
return QuizQuestionScreen(
title: 'Quiz 7/26',
question:
'Qual das seguintes imagens se assemelha à boca do seu filho/a?',
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: 'Opção A',
description:
'Selecione se a imagem se assemelha à boca do seu filho/a',
title: 'Sim',
description: 'A boca se assemelha à imagem',
weight: 2,
imagePath: 'assets/images/mouth2_a.png',
value: 'sim',
),
QuizAnswer(
title: 'Opção B',
description:
'Selecione se a imagem se assemelha à boca do seu filho/a',
weight: 2,
imagePath: 'assets/images/mouth2_b.png',
),
QuizAnswer(
title: 'Opção C',
description:
'Selecione se a imagem se assemelha à boca do seu filho/a',
weight: 2,
imagePath: 'assets/images/mouth2_c.png',
),
QuizAnswer(
title: 'Opção D',
description:
'Selecione se a imagem se assemelha à boca do seu filho/a',
weight: 2,
imagePath: 'assets/images/mouth2_d.png',
title: 'Não',
description: 'A boca não se assemelha à imagem',
weight: 1,
value: 'nao',
),
],
currentScore: currentScore,
nextRoute: (context, nextScore) => MaterialPageRoute<void>(
builder: (_) => Quiz8Screen(currentScore: nextScore, scopeId: scopeId),
),
answerType: QuizAnswerType.image,
answerType: QuizAnswerType.yesNo,
showBackButton: true,
);
}
@@ -326,42 +258,29 @@ class Quiz8Screen extends StatelessWidget {
return QuizQuestionScreen(
title: 'Quiz 8/26',
question:
'Qual das seguintes imagens se assemelha ao freio do seu filho/a?',
'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: 'Opção A',
description:
'Selecione se a imagem se assemelha ao freio do seu filho/a',
title: 'Sim',
description: 'O frénulo se assemelha à imagem',
weight: 2,
imagePath: 'assets/images/frenulum_a.png',
value: 'sim',
),
QuizAnswer(
title: 'Opção B',
description:
'Selecione se a imagem se assemelha ao freio do seu filho/a',
weight: 2,
imagePath: 'assets/images/frenulum_b.png',
),
QuizAnswer(
title: 'Opção C',
description:
'Selecione se a imagem se assemelha ao freio do seu filho/a',
weight: 2,
imagePath: 'assets/images/frenulum_c.png',
),
QuizAnswer(
title: 'Opção D',
description:
'Selecione se a imagem se assemelha ao freio do seu filho/a',
weight: 2,
imagePath: 'assets/images/frenulum_d.png',
title: 'Não',
description: 'O frénulo não se assemelha à imagem',
weight: 1,
value: 'nao',
),
],
currentScore: currentScore,
nextRoute: (context, nextScore) => MaterialPageRoute<void>(
builder: (_) => Quiz9Screen(currentScore: nextScore, scopeId: scopeId),
),
answerType: QuizAnswerType.image,
answerType: QuizAnswerType.yesNo,
showBackButton: true,
);
}