CKT String|Colors
This commit is contained in:
@@ -1,4 +1,7 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import '../colors/app_colors.dart';
|
||||
import '../strings/quiz_strings.dart';
|
||||
import '../strings/quiz_ui_strings.dart';
|
||||
|
||||
import 'quiz_checklist_screen.dart';
|
||||
import 'quiz_question_screen.dart';
|
||||
@@ -56,11 +59,11 @@ Route<void> quizPageRoute({required WidgetBuilder builder}) {
|
||||
Route<void> quizStartRoute({String? scopeId}) {
|
||||
return quizPageRoute(
|
||||
builder: (_) => QuizChecklistScreen(
|
||||
heading: 'Vamos ajudá-lo/a a compreender:',
|
||||
heading: QuizStrings.checklistHeading,
|
||||
items: const [
|
||||
'Sinais de alerta podem passar despercebidos',
|
||||
'Prevenir é melhor do que tratar',
|
||||
'Quando deve procurar um dentista (urgência vs vigilância)',
|
||||
QuizStrings.checklistItem1,
|
||||
QuizStrings.checklistItem2,
|
||||
QuizStrings.checklistItem3,
|
||||
],
|
||||
onAdvance: (context) => Navigator.of(context).pushReplacement(
|
||||
quizPageRoute(builder: (_) => Quiz1Screen(scopeId: scopeId)),
|
||||
@@ -83,25 +86,25 @@ class Quiz1Screen extends StatelessWidget {
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return QuizQuestionScreen(
|
||||
title: 'Quiz 1/29',
|
||||
fallbackColor: const Color(0xFFFF55A7),
|
||||
question: 'O seu filho/a tem problemas respiratórios diagnosticados?',
|
||||
title: QuizUiStrings.quizProgress(1, 29),
|
||||
fallbackColor: AppColors.pink,
|
||||
question: QuizStrings.q1Question,
|
||||
answers: const [
|
||||
QuizAnswer(
|
||||
title: 'Sim',
|
||||
description: 'Problemas respiratórios diagnosticados',
|
||||
title: QuizStrings.yes,
|
||||
description: QuizStrings.q1YesDescription,
|
||||
weight: 2,
|
||||
value: 'sim',
|
||||
),
|
||||
QuizAnswer(
|
||||
title: 'Não',
|
||||
description: 'Sem problemas respiratórios diagnosticados',
|
||||
title: QuizStrings.no,
|
||||
description: QuizStrings.q1NoDescription,
|
||||
weight: 1,
|
||||
value: 'nao',
|
||||
),
|
||||
QuizAnswer(
|
||||
title: 'Não sei',
|
||||
description: 'Não tenho a certeza',
|
||||
title: QuizStrings.dontKnow,
|
||||
description: QuizStrings.dontKnowDescription,
|
||||
weight: 1,
|
||||
value: 'nao_sei',
|
||||
helpVideoId: 6,
|
||||
@@ -127,25 +130,25 @@ class Quiz2Screen extends StatelessWidget {
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return QuizQuestionScreen(
|
||||
title: 'Quiz 2/29',
|
||||
fallbackColor: const Color(0xFF2F9E94),
|
||||
question: 'O seu filho/a respira habitualmente pela boca?',
|
||||
title: QuizUiStrings.quizProgress(2, 29),
|
||||
fallbackColor: AppColors.teal,
|
||||
question: QuizStrings.q2Question,
|
||||
answers: const [
|
||||
QuizAnswer(
|
||||
title: 'Sim',
|
||||
description: 'Respira habitualmente pela boca',
|
||||
title: QuizStrings.yes,
|
||||
description: QuizStrings.q2YesDescription,
|
||||
weight: 2,
|
||||
value: 'sim',
|
||||
),
|
||||
QuizAnswer(
|
||||
title: 'Não',
|
||||
description: 'Não respira habitualmente pela boca',
|
||||
title: QuizStrings.no,
|
||||
description: QuizStrings.q2NoDescription,
|
||||
weight: 1,
|
||||
value: 'nao',
|
||||
),
|
||||
QuizAnswer(
|
||||
title: 'Não sei',
|
||||
description: 'Não tenho a certeza',
|
||||
title: QuizStrings.dontKnow,
|
||||
description: QuizStrings.dontKnowDescription,
|
||||
weight: 1,
|
||||
value: 'nao_sei',
|
||||
helpVideoId: 10,
|
||||
@@ -171,25 +174,25 @@ class Quiz3Screen extends StatelessWidget {
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return QuizQuestionScreen(
|
||||
title: 'Quiz 3/29',
|
||||
fallbackColor: const Color(0xFFFF55A7),
|
||||
question: 'O seu filho/a ressona habitualmente durante a noite?',
|
||||
title: QuizUiStrings.quizProgress(3, 29),
|
||||
fallbackColor: AppColors.pink,
|
||||
question: QuizStrings.q3Question,
|
||||
answers: const [
|
||||
QuizAnswer(
|
||||
title: 'Sim',
|
||||
description: 'Ressonar habitualmente durante a noite',
|
||||
title: QuizStrings.yes,
|
||||
description: QuizStrings.q3YesDescription,
|
||||
weight: 2,
|
||||
value: 'sim',
|
||||
),
|
||||
QuizAnswer(
|
||||
title: 'Não',
|
||||
description: 'Não ressona habitualmente',
|
||||
title: QuizStrings.no,
|
||||
description: QuizStrings.q3NoDescription,
|
||||
weight: 1,
|
||||
value: 'nao',
|
||||
),
|
||||
QuizAnswer(
|
||||
title: 'Não sei',
|
||||
description: 'Não tenho a certeza',
|
||||
title: QuizStrings.dontKnow,
|
||||
description: QuizStrings.dontKnowDescription,
|
||||
weight: 1,
|
||||
value: 'nao_sei',
|
||||
helpVideoId: 8,
|
||||
@@ -215,25 +218,25 @@ class Quiz4Screen extends StatelessWidget {
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return QuizQuestionScreen(
|
||||
title: 'Quiz 4/29',
|
||||
fallbackColor: const Color(0xFFFF55A7),
|
||||
question: 'O seu filho/a sente habitualmente o nariz "tapado"?',
|
||||
title: QuizUiStrings.quizProgress(4, 29),
|
||||
fallbackColor: AppColors.pink,
|
||||
question: QuizStrings.q4Question,
|
||||
answers: const [
|
||||
QuizAnswer(
|
||||
title: 'Sim',
|
||||
description: 'Sente habitualmente o nariz tapado',
|
||||
title: QuizStrings.yes,
|
||||
description: QuizStrings.q4YesDescription,
|
||||
weight: 2,
|
||||
value: 'sim',
|
||||
),
|
||||
QuizAnswer(
|
||||
title: 'Não',
|
||||
description: 'Não sente habitualmente o nariz tapado',
|
||||
title: QuizStrings.no,
|
||||
description: QuizStrings.q4NoDescription,
|
||||
weight: 1,
|
||||
value: 'nao',
|
||||
),
|
||||
QuizAnswer(
|
||||
title: 'Não sei',
|
||||
description: 'Não tenho a certeza',
|
||||
title: QuizStrings.dontKnow,
|
||||
description: QuizStrings.dontKnowDescription,
|
||||
weight: 1,
|
||||
value: 'nao_sei',
|
||||
helpVideoId: 1,
|
||||
@@ -259,27 +262,25 @@ class Quiz5Screen extends StatelessWidget {
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return QuizQuestionScreen(
|
||||
title: 'Quiz 5/29',
|
||||
fallbackColor: const Color(0xFFFF55A7),
|
||||
question:
|
||||
'Durante o sono, o seu filho/a tem habitualmente interrupções da respiração?',
|
||||
title: QuizUiStrings.quizProgress(5, 29),
|
||||
fallbackColor: AppColors.pink,
|
||||
question: QuizStrings.q5Question,
|
||||
answers: const [
|
||||
QuizAnswer(
|
||||
title: 'Sim',
|
||||
description:
|
||||
'Tem habitualmente interrupções da respiração durante o sono',
|
||||
title: QuizStrings.yes,
|
||||
description: QuizStrings.q5YesDescription,
|
||||
weight: 2,
|
||||
value: 'sim',
|
||||
),
|
||||
QuizAnswer(
|
||||
title: 'Não',
|
||||
description: 'Não tem interrupções da respiração durante o sono',
|
||||
title: QuizStrings.no,
|
||||
description: QuizStrings.q5NoDescription,
|
||||
weight: 1,
|
||||
value: 'nao',
|
||||
),
|
||||
QuizAnswer(
|
||||
title: 'Não sei',
|
||||
description: 'Não tenho a certeza',
|
||||
title: QuizStrings.dontKnow,
|
||||
description: QuizStrings.dontKnowDescription,
|
||||
weight: 1,
|
||||
value: 'nao_sei',
|
||||
helpVideoId: 7,
|
||||
@@ -305,19 +306,19 @@ class Quiz6Screen extends StatelessWidget {
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return QuizQuestionScreen(
|
||||
title: 'Quiz 6/29',
|
||||
fallbackColor: const Color(0xFF2F9E94),
|
||||
question: 'O seu filho/a range os dentes com frequência?',
|
||||
title: QuizUiStrings.quizProgress(6, 29),
|
||||
fallbackColor: AppColors.teal,
|
||||
question: QuizStrings.q6Question,
|
||||
answers: const [
|
||||
QuizAnswer(
|
||||
title: 'Sim',
|
||||
description: 'Range os dentes com frequência',
|
||||
title: QuizStrings.yes,
|
||||
description: QuizStrings.q6YesDescription,
|
||||
weight: 2,
|
||||
value: 'sim',
|
||||
),
|
||||
QuizAnswer(
|
||||
title: 'Não',
|
||||
description: 'Não range os dentes com frequência',
|
||||
title: QuizStrings.no,
|
||||
description: QuizStrings.q6NoDescription,
|
||||
weight: 1,
|
||||
value: 'nao',
|
||||
),
|
||||
@@ -342,25 +343,25 @@ class Quiz7Screen extends StatelessWidget {
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return QuizQuestionScreen(
|
||||
title: 'Quiz 7/29',
|
||||
fallbackColor: const Color(0xFFFF55A7),
|
||||
question: 'O seu filho/a habitualmente tem alergias sazonais?',
|
||||
title: QuizUiStrings.quizProgress(7, 29),
|
||||
fallbackColor: AppColors.pink,
|
||||
question: QuizStrings.q7Question,
|
||||
answers: const [
|
||||
QuizAnswer(
|
||||
title: 'Sim',
|
||||
description: 'Habitualmente tem alergias sazonais',
|
||||
title: QuizStrings.yes,
|
||||
description: QuizStrings.q7YesDescription,
|
||||
weight: 2,
|
||||
value: 'sim',
|
||||
),
|
||||
QuizAnswer(
|
||||
title: 'Não',
|
||||
description: 'Não tem alergias sazonais',
|
||||
title: QuizStrings.no,
|
||||
description: QuizStrings.q7NoDescription,
|
||||
weight: 1,
|
||||
value: 'nao',
|
||||
),
|
||||
QuizAnswer(
|
||||
title: 'Não sei',
|
||||
description: 'Não tenho a certeza',
|
||||
title: QuizStrings.dontKnow,
|
||||
description: QuizStrings.dontKnowDescription,
|
||||
weight: 1,
|
||||
value: 'nao_sei',
|
||||
helpVideoId: 2,
|
||||
@@ -386,25 +387,25 @@ class Quiz8Screen extends StatelessWidget {
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return QuizQuestionScreen(
|
||||
title: 'Quiz 8/29',
|
||||
fallbackColor: const Color(0xFFFF55A7),
|
||||
question: 'O seu filho/a acorda com saliva seca na cara ou na almofada?',
|
||||
title: QuizUiStrings.quizProgress(8, 29),
|
||||
fallbackColor: AppColors.pink,
|
||||
question: QuizStrings.q8Question,
|
||||
answers: const [
|
||||
QuizAnswer(
|
||||
title: 'Sim',
|
||||
description: 'Acorda com saliva seca na cara ou na almofada',
|
||||
title: QuizStrings.yes,
|
||||
description: QuizStrings.q8YesDescription,
|
||||
weight: 2,
|
||||
value: 'sim',
|
||||
),
|
||||
QuizAnswer(
|
||||
title: 'Não',
|
||||
description: 'Não acorda com saliva seca',
|
||||
title: QuizStrings.no,
|
||||
description: QuizStrings.q8NoDescription,
|
||||
weight: 1,
|
||||
value: 'nao',
|
||||
),
|
||||
QuizAnswer(
|
||||
title: 'Não sei',
|
||||
description: 'Não tenho a certeza',
|
||||
title: QuizStrings.dontKnow,
|
||||
description: QuizStrings.dontKnowDescription,
|
||||
weight: 1,
|
||||
value: 'nao_sei',
|
||||
helpVideoId: 9,
|
||||
@@ -430,25 +431,25 @@ class Quiz9Screen extends StatelessWidget {
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return QuizQuestionScreen(
|
||||
title: 'Quiz 9/29',
|
||||
fallbackColor: const Color(0xFF2F9E94),
|
||||
question: 'O seu filho/a teve ou costuma ter com frequência otites?',
|
||||
title: QuizUiStrings.quizProgress(9, 29),
|
||||
fallbackColor: AppColors.teal,
|
||||
question: QuizStrings.q9Question,
|
||||
answers: const [
|
||||
QuizAnswer(
|
||||
title: 'Sim',
|
||||
description: 'Teve ou costuma ter com frequência otites',
|
||||
title: QuizStrings.yes,
|
||||
description: QuizStrings.q9YesDescription,
|
||||
weight: 2,
|
||||
value: 'sim',
|
||||
),
|
||||
QuizAnswer(
|
||||
title: 'Não',
|
||||
description: 'Não teve ou não costuma ter otites',
|
||||
title: QuizStrings.no,
|
||||
description: QuizStrings.q9NoDescription,
|
||||
weight: 1,
|
||||
value: 'nao',
|
||||
),
|
||||
QuizAnswer(
|
||||
title: 'Não sei',
|
||||
description: 'Não tenho a certeza',
|
||||
title: QuizStrings.dontKnow,
|
||||
description: QuizStrings.dontKnowDescription,
|
||||
weight: 1,
|
||||
value: 'nao_sei',
|
||||
helpVideoId: 3,
|
||||
@@ -474,25 +475,25 @@ class Quiz10Screen extends StatelessWidget {
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return QuizQuestionScreen(
|
||||
title: 'Quiz 10/29',
|
||||
fallbackColor: const Color(0xFFFF55A7),
|
||||
question: 'O seu filho/a teve ou costuma ter com frequência amigdalites?',
|
||||
title: QuizUiStrings.quizProgress(10, 29),
|
||||
fallbackColor: AppColors.pink,
|
||||
question: QuizStrings.q10Question,
|
||||
answers: const [
|
||||
QuizAnswer(
|
||||
title: 'Sim',
|
||||
description: 'Teve ou costuma ter com frequência amigdalites',
|
||||
title: QuizStrings.yes,
|
||||
description: QuizStrings.q10YesDescription,
|
||||
weight: 2,
|
||||
value: 'sim',
|
||||
),
|
||||
QuizAnswer(
|
||||
title: 'Não',
|
||||
description: 'Não teve ou não costuma ter amigdalites',
|
||||
title: QuizStrings.no,
|
||||
description: QuizStrings.q10NoDescription,
|
||||
weight: 1,
|
||||
value: 'nao',
|
||||
),
|
||||
QuizAnswer(
|
||||
title: 'Não sei',
|
||||
description: 'Não tenho a certeza',
|
||||
title: QuizStrings.dontKnow,
|
||||
description: QuizStrings.dontKnowDescription,
|
||||
weight: 1,
|
||||
value: 'nao_sei',
|
||||
helpVideoId: 4,
|
||||
@@ -518,26 +519,25 @@ class Quiz11Screen extends StatelessWidget {
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return QuizQuestionScreen(
|
||||
title: 'Quiz 11/29',
|
||||
fallbackColor: const Color(0xFF2F9E94),
|
||||
question:
|
||||
'O seu filho/a teve ou costuma ter com frequência bronquiolites?',
|
||||
title: QuizUiStrings.quizProgress(11, 29),
|
||||
fallbackColor: AppColors.teal,
|
||||
question: QuizStrings.q11Question,
|
||||
answers: const [
|
||||
QuizAnswer(
|
||||
title: 'Sim',
|
||||
description: 'Teve ou costuma ter com frequência bronquiolites',
|
||||
title: QuizStrings.yes,
|
||||
description: QuizStrings.q11YesDescription,
|
||||
weight: 2,
|
||||
value: 'sim',
|
||||
),
|
||||
QuizAnswer(
|
||||
title: 'Não',
|
||||
description: 'Não teve ou não costuma ter bronquiolites',
|
||||
title: QuizStrings.no,
|
||||
description: QuizStrings.q11NoDescription,
|
||||
weight: 1,
|
||||
value: 'nao',
|
||||
),
|
||||
QuizAnswer(
|
||||
title: 'Não sei',
|
||||
description: 'Não tenho a certeza',
|
||||
title: QuizStrings.dontKnow,
|
||||
description: QuizStrings.dontKnowDescription,
|
||||
weight: 1,
|
||||
value: 'nao_sei',
|
||||
helpVideoId: 5,
|
||||
@@ -563,19 +563,19 @@ class Quiz12Screen extends StatelessWidget {
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return QuizQuestionScreen(
|
||||
title: 'Quiz 12/29',
|
||||
fallbackColor: const Color(0xFFFF55A7),
|
||||
question: 'O seu filho/a apresenta dificuldades a mastigar?',
|
||||
title: QuizUiStrings.quizProgress(12, 29),
|
||||
fallbackColor: AppColors.pink,
|
||||
question: QuizStrings.q12Question,
|
||||
answers: const [
|
||||
QuizAnswer(
|
||||
title: 'Sim',
|
||||
description: 'Apresenta dificuldades a mastigar',
|
||||
title: QuizStrings.yes,
|
||||
description: QuizStrings.q12YesDescription,
|
||||
weight: 2,
|
||||
value: 'sim',
|
||||
),
|
||||
QuizAnswer(
|
||||
title: 'Não',
|
||||
description: 'Não apresenta dificuldades a mastigar',
|
||||
title: QuizStrings.no,
|
||||
description: QuizStrings.q12NoDescription,
|
||||
weight: 1,
|
||||
value: 'nao',
|
||||
),
|
||||
@@ -600,19 +600,19 @@ class Quiz13Screen extends StatelessWidget {
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return QuizQuestionScreen(
|
||||
title: 'Quiz 13/29',
|
||||
fallbackColor: const Color(0xFF2F9E94),
|
||||
question: 'O seu filho/a habitualmente é lento a comer?',
|
||||
title: QuizUiStrings.quizProgress(13, 29),
|
||||
fallbackColor: AppColors.teal,
|
||||
question: QuizStrings.q13Question,
|
||||
answers: const [
|
||||
QuizAnswer(
|
||||
title: 'Sim',
|
||||
description: 'Habitualmente é lento a comer',
|
||||
title: QuizStrings.yes,
|
||||
description: QuizStrings.q13YesDescription,
|
||||
weight: 2,
|
||||
value: 'sim',
|
||||
),
|
||||
QuizAnswer(
|
||||
title: 'Não',
|
||||
description: 'Não é lento a comer',
|
||||
title: QuizStrings.no,
|
||||
description: QuizStrings.q13NoDescription,
|
||||
weight: 1,
|
||||
value: 'nao',
|
||||
),
|
||||
@@ -637,19 +637,19 @@ class Quiz14Screen extends StatelessWidget {
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return QuizQuestionScreen(
|
||||
title: 'Quiz 14/29',
|
||||
fallbackColor: const Color(0xFFFF55A7),
|
||||
question: 'O seu filho/a habitualmente prefere comer alimentos moles?',
|
||||
title: QuizUiStrings.quizProgress(14, 29),
|
||||
fallbackColor: AppColors.pink,
|
||||
question: QuizStrings.q14Question,
|
||||
answers: const [
|
||||
QuizAnswer(
|
||||
title: 'Sim',
|
||||
description: 'Habitualmente prefere comer alimentos moles',
|
||||
title: QuizStrings.yes,
|
||||
description: QuizStrings.q14YesDescription,
|
||||
weight: 2,
|
||||
value: 'sim',
|
||||
),
|
||||
QuizAnswer(
|
||||
title: 'Não',
|
||||
description: 'Não prefere alimentos moles',
|
||||
title: QuizStrings.no,
|
||||
description: QuizStrings.q14NoDescription,
|
||||
weight: 1,
|
||||
value: 'nao',
|
||||
),
|
||||
@@ -674,25 +674,25 @@ class Quiz15Screen extends StatelessWidget {
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return QuizQuestionScreen(
|
||||
title: 'Quiz 15/29',
|
||||
fallbackColor: const Color(0xFFFF55A7),
|
||||
question: 'Em bebé apenas foi alimentado por biberão?',
|
||||
title: QuizUiStrings.quizProgress(15, 29),
|
||||
fallbackColor: AppColors.pink,
|
||||
question: QuizStrings.q15Question,
|
||||
answers: const [
|
||||
QuizAnswer(
|
||||
title: 'Sim',
|
||||
description: 'Em bebé apenas foi alimentado por biberão',
|
||||
title: QuizStrings.yes,
|
||||
description: QuizStrings.q15YesDescription,
|
||||
weight: 2,
|
||||
value: 'sim',
|
||||
),
|
||||
QuizAnswer(
|
||||
title: 'Não',
|
||||
description: 'Não foi apenas alimentado por biberão',
|
||||
title: QuizStrings.no,
|
||||
description: QuizStrings.q15NoDescription,
|
||||
weight: 1,
|
||||
value: 'nao',
|
||||
),
|
||||
QuizAnswer(
|
||||
title: 'Não sei',
|
||||
description: 'Não tenho a certeza',
|
||||
title: QuizStrings.dontKnow,
|
||||
description: QuizStrings.dontKnowDescription,
|
||||
weight: 1,
|
||||
value: 'nao_sei',
|
||||
helpVideoId: 11,
|
||||
@@ -718,25 +718,25 @@ class Quiz16Screen extends StatelessWidget {
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return QuizQuestionScreen(
|
||||
title: 'Quiz 16/29',
|
||||
fallbackColor: const Color(0xFF2F9E94),
|
||||
question: 'O seu filho/a usa ou usou chupeta com frequência?',
|
||||
title: QuizUiStrings.quizProgress(16, 29),
|
||||
fallbackColor: AppColors.teal,
|
||||
question: QuizStrings.q16Question,
|
||||
answers: const [
|
||||
QuizAnswer(
|
||||
title: 'Sim',
|
||||
description: 'Usa ou usou chupeta com frequência',
|
||||
title: QuizStrings.yes,
|
||||
description: QuizStrings.q16YesDescription,
|
||||
weight: 2,
|
||||
value: 'sim',
|
||||
),
|
||||
QuizAnswer(
|
||||
title: 'Não',
|
||||
description: 'Não usa ou não usou chupeta com frequência',
|
||||
title: QuizStrings.no,
|
||||
description: QuizStrings.q16NoDescription,
|
||||
weight: 1,
|
||||
value: 'nao',
|
||||
),
|
||||
QuizAnswer(
|
||||
title: 'Não sei',
|
||||
description: 'Não tenho a certeza',
|
||||
title: QuizStrings.dontKnow,
|
||||
description: QuizStrings.dontKnowDescription,
|
||||
weight: 1,
|
||||
value: 'nao_sei',
|
||||
helpVideoId: 12,
|
||||
@@ -762,25 +762,25 @@ class Quiz17Screen extends StatelessWidget {
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return QuizQuestionScreen(
|
||||
title: 'Quiz 17/29',
|
||||
fallbackColor: const Color(0xFFFF55A7),
|
||||
question: 'O seu filho/a chucha ou já chuchou o dedo com frequência?',
|
||||
title: QuizUiStrings.quizProgress(17, 29),
|
||||
fallbackColor: AppColors.pink,
|
||||
question: QuizStrings.q17Question,
|
||||
answers: const [
|
||||
QuizAnswer(
|
||||
title: 'Sim',
|
||||
description: 'Chucha ou já chuchou o dedo com frequência',
|
||||
title: QuizStrings.yes,
|
||||
description: QuizStrings.q17YesDescription,
|
||||
weight: 2,
|
||||
value: 'sim',
|
||||
),
|
||||
QuizAnswer(
|
||||
title: 'Não',
|
||||
description: 'Não chucha ou não chuchou o dedo com frequência',
|
||||
title: QuizStrings.no,
|
||||
description: QuizStrings.q17NoDescription,
|
||||
weight: 1,
|
||||
value: 'nao',
|
||||
),
|
||||
QuizAnswer(
|
||||
title: 'Não sei',
|
||||
description: 'Não tenho a certeza',
|
||||
title: QuizStrings.dontKnow,
|
||||
description: QuizStrings.dontKnowDescription,
|
||||
weight: 1,
|
||||
value: 'nao_sei',
|
||||
helpVideoId: 13,
|
||||
@@ -814,23 +814,22 @@ class Quiz18Screen extends StatelessWidget {
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return QuizQuestionScreen(
|
||||
title: 'Quiz 18/29',
|
||||
fallbackColor: const Color(0xFFFF55A7),
|
||||
title: QuizUiStrings.quizProgress(18, 29),
|
||||
fallbackColor: AppColors.pink,
|
||||
answerImageAspectRatio: 1.5,
|
||||
question:
|
||||
'Qual das seguintes imagens é mais parecida com a postura do seu filho/a?',
|
||||
question: QuizStrings.q18Question,
|
||||
answers: const [
|
||||
QuizAnswer(
|
||||
title: 'Postura inadequada',
|
||||
description: 'Postura curvada, ombros e pescoço projetados',
|
||||
title: QuizStrings.q18Answer1Title,
|
||||
description: QuizStrings.q18Answer1Description,
|
||||
weight: 2,
|
||||
hideTitle: true,
|
||||
value: 'postura_inadequada',
|
||||
imagePath: 'assets/mockup_images/0.1.png',
|
||||
),
|
||||
QuizAnswer(
|
||||
title: 'Postura correta',
|
||||
description: 'Postura ereta, coluna alinhada',
|
||||
title: QuizStrings.q18Answer2Title,
|
||||
description: QuizStrings.q18Answer2Description,
|
||||
weight: 1,
|
||||
hideTitle: true,
|
||||
value: 'postura_correta',
|
||||
@@ -857,14 +856,13 @@ class Quiz19Screen extends StatelessWidget {
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return QuizQuestionScreen(
|
||||
title: 'Quiz 19/29',
|
||||
fallbackColor: const Color(0xFFFF55A7),
|
||||
question:
|
||||
'Qual das seguintes imagens é mais parecida com o perfil do seu filho/a?',
|
||||
title: QuizUiStrings.quizProgress(19, 29),
|
||||
fallbackColor: AppColors.pink,
|
||||
question: QuizStrings.q19Question,
|
||||
answers: [
|
||||
QuizAnswer(
|
||||
title: 'Perfil convexo',
|
||||
description: 'Perfil facial convexo',
|
||||
title: QuizStrings.q19Answer1Title,
|
||||
description: QuizStrings.q19Answer1Description,
|
||||
weight: 2,
|
||||
hideTitle: true,
|
||||
value: 'perfil_convexo',
|
||||
@@ -875,8 +873,8 @@ class Quiz19Screen extends StatelessWidget {
|
||||
),
|
||||
),
|
||||
QuizAnswer(
|
||||
title: 'Perfil reto',
|
||||
description: 'Perfil facial reto',
|
||||
title: QuizStrings.q19Answer2Title,
|
||||
description: QuizStrings.q19Answer2Description,
|
||||
weight: 1,
|
||||
hideTitle: true,
|
||||
value: 'perfil_reto',
|
||||
@@ -887,8 +885,8 @@ class Quiz19Screen extends StatelessWidget {
|
||||
),
|
||||
),
|
||||
QuizAnswer(
|
||||
title: 'Perfil côncavo',
|
||||
description: 'Perfil facial côncavo',
|
||||
title: QuizStrings.q19Answer3Title,
|
||||
description: QuizStrings.q19Answer3Description,
|
||||
weight: 2,
|
||||
hideTitle: true,
|
||||
value: 'perfil_concavo',
|
||||
@@ -919,21 +917,21 @@ class Quiz20Screen extends StatelessWidget {
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return QuizQuestionScreen(
|
||||
title: 'Quiz 20/29',
|
||||
fallbackColor: const Color(0xFF2F9E94),
|
||||
question: 'Qual é a posição da boca do seu filho/a habitualmente?',
|
||||
title: QuizUiStrings.quizProgress(20, 29),
|
||||
fallbackColor: AppColors.teal,
|
||||
question: QuizStrings.q20Question,
|
||||
answers: [
|
||||
const QuizAnswer(
|
||||
title: 'Boca fechada',
|
||||
description: 'Boca fechada habitualmente',
|
||||
title: QuizStrings.q20Answer1Title,
|
||||
description: QuizStrings.q20Answer1Description,
|
||||
weight: 1,
|
||||
hideTitle: true,
|
||||
value: 'boca_fechada',
|
||||
imagePath: 'assets/mockup_images/7.png',
|
||||
),
|
||||
QuizAnswer(
|
||||
title: 'Boca entreaberta',
|
||||
description: 'Boca entreaberta habitualmente',
|
||||
title: QuizStrings.q20Answer2Title,
|
||||
description: QuizStrings.q20Answer2Description,
|
||||
weight: 2,
|
||||
hideTitle: true,
|
||||
value: 'boca_entreaberta',
|
||||
@@ -964,14 +962,13 @@ class Quiz21Screen extends StatelessWidget {
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return QuizQuestionScreen(
|
||||
title: 'Quiz 21/29',
|
||||
fallbackColor: const Color(0xFFFF55A7),
|
||||
question:
|
||||
'Qual das imagens, na zona abaixo dos olhos, se assemelha mais ao seu filho/a?',
|
||||
title: QuizUiStrings.quizProgress(21, 29),
|
||||
fallbackColor: AppColors.pink,
|
||||
question: QuizStrings.q21Question,
|
||||
answers: [
|
||||
QuizAnswer(
|
||||
title: 'Sem sinais',
|
||||
description: 'Sem olheiras visíveis abaixo dos olhos',
|
||||
title: QuizStrings.q21Answer1Title,
|
||||
description: QuizStrings.q21Answer1Description,
|
||||
weight: 1,
|
||||
hideTitle: true,
|
||||
value: 'sem_olheiras',
|
||||
@@ -982,8 +979,8 @@ class Quiz21Screen extends StatelessWidget {
|
||||
),
|
||||
),
|
||||
QuizAnswer(
|
||||
title: 'Sinal de risco',
|
||||
description: 'Olheiras visíveis abaixo dos olhos',
|
||||
title: QuizStrings.q21Answer2Title,
|
||||
description: QuizStrings.q21Answer2Description,
|
||||
weight: 2,
|
||||
hideTitle: true,
|
||||
value: 'com_olheiras',
|
||||
@@ -1014,15 +1011,14 @@ class Quiz22Screen extends StatelessWidget {
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return QuizQuestionScreen(
|
||||
title: 'Quiz 22/29',
|
||||
fallbackColor: const Color(0xFFFF55A7),
|
||||
title: QuizUiStrings.quizProgress(22, 29),
|
||||
fallbackColor: AppColors.pink,
|
||||
isSignQuestion: true,
|
||||
question:
|
||||
'Qual das imagens é mais parecida com o queixo do seu filho/a com a boca fechada?',
|
||||
question: QuizStrings.q22Question,
|
||||
answers: [
|
||||
QuizAnswer(
|
||||
title: 'Queixo relaxado',
|
||||
description: 'Queixo liso e relaxado com a boca fechada',
|
||||
title: QuizStrings.q22Answer1Title,
|
||||
description: QuizStrings.q22Answer1Description,
|
||||
weight: 1,
|
||||
hideTitle: true,
|
||||
value: 'queixo_correto',
|
||||
@@ -1034,8 +1030,8 @@ class Quiz22Screen extends StatelessWidget {
|
||||
),
|
||||
),
|
||||
const QuizAnswer(
|
||||
title: 'Queixo tenso',
|
||||
description: 'Queixo tenso/franzido com a boca fechada',
|
||||
title: QuizStrings.q22Answer2Title,
|
||||
description: QuizStrings.q22Answer2Description,
|
||||
weight: 2,
|
||||
hideTitle: true,
|
||||
value: 'queixo_tenso',
|
||||
@@ -1070,31 +1066,30 @@ class Quiz23Screen extends StatelessWidget {
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return QuizQuestionScreen(
|
||||
title: 'Quiz 23/29',
|
||||
fallbackColor: const Color(0xFF2F9E94),
|
||||
title: QuizUiStrings.quizProgress(23, 29),
|
||||
fallbackColor: AppColors.teal,
|
||||
isSignQuestion: true,
|
||||
question:
|
||||
'Qual das seguintes imagens se assemelha à boca do seu filho/a?',
|
||||
question: QuizStrings.q23Question,
|
||||
answers: const [
|
||||
QuizAnswer(
|
||||
title: 'Dentição sobreposta',
|
||||
description: 'Dentes sobrepostos/tortos',
|
||||
title: QuizStrings.q23Answer1Title,
|
||||
description: QuizStrings.q23Answer1Description,
|
||||
weight: 2,
|
||||
hideTitle: true,
|
||||
value: 'dentes_sobrepostos',
|
||||
imagePath: 'assets/mockup_images/10.png',
|
||||
),
|
||||
QuizAnswer(
|
||||
title: 'Dentição alinhada',
|
||||
description: 'Dentição bem alinhada, sem apinhamento',
|
||||
title: QuizStrings.q23Answer2Title,
|
||||
description: QuizStrings.q23Answer2Description,
|
||||
weight: 1,
|
||||
hideTitle: true,
|
||||
value: 'dentes_alinhados',
|
||||
imagePath: 'assets/mockup_images/11.png',
|
||||
),
|
||||
QuizAnswer(
|
||||
title: 'Dentição desalinhada',
|
||||
description: 'Dentição desalinhada/apinhada',
|
||||
title: QuizStrings.q23Answer3Title,
|
||||
description: QuizStrings.q23Answer3Description,
|
||||
weight: 2,
|
||||
hideTitle: true,
|
||||
value: 'dentes_desalinhados',
|
||||
@@ -1121,31 +1116,30 @@ class Quiz24Screen extends StatelessWidget {
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return QuizQuestionScreen(
|
||||
title: 'Quiz 24/29',
|
||||
fallbackColor: const Color(0xFF2F9E94),
|
||||
title: QuizUiStrings.quizProgress(24, 29),
|
||||
fallbackColor: AppColors.teal,
|
||||
isSignQuestion: true,
|
||||
question:
|
||||
'Qual das seguintes imagens se assemelha à boca do seu filho/a?',
|
||||
question: QuizStrings.q24Question,
|
||||
answers: const [
|
||||
QuizAnswer(
|
||||
title: 'Apinhamento moderado',
|
||||
description: 'Dentes rodados/desalinhados de forma mais visível',
|
||||
title: QuizStrings.q24Answer1Title,
|
||||
description: QuizStrings.q24Answer1Description,
|
||||
weight: 2,
|
||||
hideTitle: true,
|
||||
value: 'apinhamento_moderado',
|
||||
imagePath: 'assets/mockup_images/16.png',
|
||||
),
|
||||
QuizAnswer(
|
||||
title: 'Ligeiro desalinhamento',
|
||||
description: 'Pequeno desalinhamento ou espaço entre alguns dentes',
|
||||
title: QuizStrings.q24Answer2Title,
|
||||
description: QuizStrings.q24Answer2Description,
|
||||
weight: 1,
|
||||
hideTitle: true,
|
||||
value: 'apinhamento_leve',
|
||||
imagePath: 'assets/mockup_images/15.png',
|
||||
),
|
||||
QuizAnswer(
|
||||
title: 'Apinhamento acentuado',
|
||||
description: 'Dentes muito sobrepostos entre si',
|
||||
title: QuizStrings.q24Answer3Title,
|
||||
description: QuizStrings.q24Answer3Description,
|
||||
weight: 2,
|
||||
hideTitle: true,
|
||||
value: 'apinhamento_acentuado',
|
||||
@@ -1172,22 +1166,21 @@ class Quiz25Screen extends StatelessWidget {
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return QuizQuestionScreen(
|
||||
title: 'Quiz 25/29',
|
||||
fallbackColor: const Color(0xFFFF55A7),
|
||||
question:
|
||||
'Qual das seguintes imagens se assemelha ao freio labial do seu filho/a?',
|
||||
title: QuizUiStrings.quizProgress(25, 29),
|
||||
fallbackColor: AppColors.pink,
|
||||
question: QuizStrings.q25Question,
|
||||
answers: const [
|
||||
QuizAnswer(
|
||||
title: 'Freio labial correto',
|
||||
description: 'Inserção do freio labial mais alta',
|
||||
title: QuizStrings.q25Answer1Title,
|
||||
description: QuizStrings.q25Answer1Description,
|
||||
weight: 1,
|
||||
hideTitle: true,
|
||||
value: 'freio_labial_correto',
|
||||
imagePath: 'assets/mockup_images/20.png',
|
||||
),
|
||||
QuizAnswer(
|
||||
title: 'Freio labial inadequado',
|
||||
description: 'Inserção do freio labial baixa, entre os dentes',
|
||||
title: QuizStrings.q25Answer2Title,
|
||||
description: QuizStrings.q25Answer2Description,
|
||||
weight: 2,
|
||||
hideTitle: true,
|
||||
value: 'freio_labial_inadequado',
|
||||
@@ -1214,22 +1207,21 @@ class Quiz26Screen extends StatelessWidget {
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return QuizQuestionScreen(
|
||||
title: 'Quiz 26/29',
|
||||
fallbackColor: const Color(0xFFFF55A7),
|
||||
question:
|
||||
'Qual das seguintes imagens se assemelha ao freio lingual do seu filho/a?',
|
||||
title: QuizUiStrings.quizProgress(26, 29),
|
||||
fallbackColor: AppColors.pink,
|
||||
question: QuizStrings.q26Question,
|
||||
answers: const [
|
||||
QuizAnswer(
|
||||
title: 'Freio lingual inadequado',
|
||||
description: 'Freio lingual curto/apertado (língua em coração)',
|
||||
title: QuizStrings.q26Answer1Title,
|
||||
description: QuizStrings.q26Answer1Description,
|
||||
weight: 2,
|
||||
hideTitle: true,
|
||||
value: 'freio_lingual_inadequado',
|
||||
imagePath: 'assets/mockup_images/17.png',
|
||||
),
|
||||
QuizAnswer(
|
||||
title: 'Freio lingual correto',
|
||||
description: 'Língua move-se livremente, sem restrição visível',
|
||||
title: QuizStrings.q26Answer2Title,
|
||||
description: QuizStrings.q26Answer2Description,
|
||||
weight: 1,
|
||||
hideTitle: true,
|
||||
value: 'freio_lingual_correto',
|
||||
@@ -1256,31 +1248,30 @@ class Quiz27Screen extends StatelessWidget {
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return QuizQuestionScreen(
|
||||
title: 'Quiz 27/29',
|
||||
fallbackColor: const Color(0xFF2F9E94),
|
||||
title: QuizUiStrings.quizProgress(27, 29),
|
||||
fallbackColor: AppColors.teal,
|
||||
isSignQuestion: true,
|
||||
question:
|
||||
'Qual das seguintes imagens se assemelha com a boca do seu filho/a?',
|
||||
question: QuizStrings.q27Question,
|
||||
answers: const [
|
||||
QuizAnswer(
|
||||
title: 'Dentição desalinhada',
|
||||
description: 'Dentição desalinhada/apinhada',
|
||||
title: QuizStrings.q27Answer1Title,
|
||||
description: QuizStrings.q27Answer1Description,
|
||||
weight: 2,
|
||||
hideTitle: true,
|
||||
value: 'dentes_desalinhados_3',
|
||||
imagePath: 'assets/mockup_images/23.JPEG',
|
||||
),
|
||||
QuizAnswer(
|
||||
title: 'Dentição sobreposta',
|
||||
description: 'Dentes sobrepostos/tortos',
|
||||
title: QuizStrings.q27Answer2Title,
|
||||
description: QuizStrings.q27Answer2Description,
|
||||
weight: 2,
|
||||
hideTitle: true,
|
||||
value: 'dentes_sobrepostos_3',
|
||||
imagePath: 'assets/mockup_images/24.png',
|
||||
),
|
||||
QuizAnswer(
|
||||
title: 'Dentição alinhada',
|
||||
description: 'Dentição bem alinhada, sem apinhamento',
|
||||
title: QuizStrings.q27Answer3Title,
|
||||
description: QuizStrings.q27Answer3Description,
|
||||
weight: 1,
|
||||
hideTitle: true,
|
||||
value: 'dentes_alinhados_3',
|
||||
@@ -1307,23 +1298,22 @@ class Quiz28Screen extends StatelessWidget {
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return QuizQuestionScreen(
|
||||
title: 'Quiz 28/29',
|
||||
fallbackColor: const Color(0xFF2F9E94),
|
||||
title: QuizUiStrings.quizProgress(28, 29),
|
||||
fallbackColor: AppColors.teal,
|
||||
isSignQuestion: true,
|
||||
question:
|
||||
'Qual das seguintes imagens se assemelha à boca do seu filho/a?',
|
||||
question: QuizStrings.q28Question,
|
||||
answers: const [
|
||||
QuizAnswer(
|
||||
title: 'Dentição alinhada',
|
||||
description: 'Dentição bem alinhada, sem apinhamento',
|
||||
title: QuizStrings.q28Answer1Title,
|
||||
description: QuizStrings.q28Answer1Description,
|
||||
weight: 1,
|
||||
hideTitle: true,
|
||||
value: 'dentes_alinhados_2',
|
||||
imagePath: 'assets/mockup_images/29.jpeg',
|
||||
),
|
||||
QuizAnswer(
|
||||
title: 'Dentição desalinhada',
|
||||
description: 'Dentes sobrepostos/apinhados',
|
||||
title: QuizStrings.q28Answer2Title,
|
||||
description: QuizStrings.q28Answer2Description,
|
||||
weight: 2,
|
||||
hideTitle: true,
|
||||
value: 'dentes_desalinhados_2',
|
||||
@@ -1350,24 +1340,23 @@ class Quiz29Screen extends StatelessWidget {
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return QuizQuestionScreen(
|
||||
title: 'Quiz 29/29',
|
||||
fallbackColor: const Color(0xFFFF55A7),
|
||||
title: QuizUiStrings.quizProgress(29, 29),
|
||||
fallbackColor: AppColors.pink,
|
||||
isSignQuestion: true,
|
||||
correctBadgeLabel: 'Posição saudável',
|
||||
question:
|
||||
'Qual das seguintes imagens se assemelha ao céu da boca do seu filho/a?',
|
||||
correctBadgeLabel: QuizStrings.q29CorrectBadgeLabel,
|
||||
question: QuizStrings.q29Question,
|
||||
answers: const [
|
||||
QuizAnswer(
|
||||
title: 'Posição profunda incorreta',
|
||||
description: 'Palato estreito/profundo, em forma de V',
|
||||
title: QuizStrings.q29Answer1Title,
|
||||
description: QuizStrings.q29Answer1Description,
|
||||
weight: 2,
|
||||
hideTitle: true,
|
||||
value: 'palato_v',
|
||||
imagePath: 'assets/mockup_images/26.png',
|
||||
),
|
||||
QuizAnswer(
|
||||
title: 'Posição em U saudável',
|
||||
description: 'Palato largo, em forma de U',
|
||||
title: QuizStrings.q29Answer2Title,
|
||||
description: QuizStrings.q29Answer2Description,
|
||||
weight: 1,
|
||||
hideTitle: true,
|
||||
value: 'palato_u',
|
||||
|
||||
@@ -1,11 +1,13 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import '../colors/app_colors.dart';
|
||||
|
||||
import '../strings/quiz_ui_strings.dart';
|
||||
import '../widgets/entrance.dart';
|
||||
import '../widgets/liquid_waves_background.dart';
|
||||
import '../widgets/tap_bounce.dart';
|
||||
|
||||
const Color _pink = Color(0xFFFF55A7);
|
||||
const Color _teal = Color(0xFF2F9E94);
|
||||
const Color _pink = AppColors.pink;
|
||||
const Color _teal = AppColors.teal;
|
||||
|
||||
/// Ecrã intersticial informativo, mostrado a meio do quiz para preparar o
|
||||
/// utilizador antes de continuar (ex.: logo a seguir a um vídeo-guia) —
|
||||
@@ -30,7 +32,7 @@ class QuizChecklistScreen extends StatelessWidget {
|
||||
body: Stack(
|
||||
clipBehavior: Clip.none,
|
||||
children: [
|
||||
Positioned.fill(child: Container(color: const Color(0xFFFAFAF7))),
|
||||
Positioned.fill(child: Container(color: AppColors.background)),
|
||||
const LiquidWavesBackground(),
|
||||
SafeArea(
|
||||
child: Padding(
|
||||
@@ -129,7 +131,7 @@ class QuizChecklistScreen extends StatelessWidget {
|
||||
),
|
||||
),
|
||||
onPressed: () => onAdvance(context),
|
||||
child: const Text('Avançar'),
|
||||
child: const Text(QuizUiStrings.advance),
|
||||
),
|
||||
),
|
||||
),
|
||||
|
||||
@@ -1,7 +1,9 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import '../colors/app_colors.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
|
||||
import '../screens/video_screen.dart';
|
||||
import '../strings/quiz_ui_strings.dart';
|
||||
import '../widgets/entrance.dart';
|
||||
import '../widgets/liquid_waves_background.dart';
|
||||
import '../widgets/tap_bounce.dart';
|
||||
@@ -82,7 +84,7 @@ class QuizQuestionScreen extends StatefulWidget {
|
||||
this.suggestedVideoTitle,
|
||||
this.fallbackColor,
|
||||
this.answerImageAspectRatio,
|
||||
this.correctBadgeLabel = 'Posição certa',
|
||||
this.correctBadgeLabel = QuizUiStrings.defaultCorrectBadgeLabel,
|
||||
});
|
||||
|
||||
final String title;
|
||||
@@ -197,7 +199,7 @@ class _QuizQuestionScreenState extends State<QuizQuestionScreen> {
|
||||
body: Stack(
|
||||
clipBehavior: Clip.none,
|
||||
children: [
|
||||
Positioned.fill(child: Container(color: const Color(0xFFFAFAF7))),
|
||||
Positioned.fill(child: Container(color: AppColors.background)),
|
||||
const LiquidWavesBackground(),
|
||||
SafeArea(
|
||||
child: Column(
|
||||
@@ -222,7 +224,7 @@ class _QuizQuestionScreenState extends State<QuizQuestionScreen> {
|
||||
padding: EdgeInsets.all(9),
|
||||
child: Icon(
|
||||
Icons.arrow_back_rounded,
|
||||
color: Color(0xFF2F9E94),
|
||||
color: AppColors.teal,
|
||||
size: 20,
|
||||
),
|
||||
),
|
||||
@@ -241,11 +243,11 @@ class _QuizQuestionScreenState extends State<QuizQuestionScreen> {
|
||||
1.0,
|
||||
),
|
||||
minHeight: 8,
|
||||
backgroundColor: const Color(
|
||||
0xFFFF55A7,
|
||||
).withValues(alpha: 0.15),
|
||||
backgroundColor: AppColors.pink.withValues(
|
||||
alpha: 0.15,
|
||||
),
|
||||
valueColor: const AlwaysStoppedAnimation<Color>(
|
||||
Color(0xFFFF55A7),
|
||||
AppColors.pink,
|
||||
),
|
||||
),
|
||||
),
|
||||
@@ -304,7 +306,7 @@ class _QuizQuestionScreenState extends State<QuizQuestionScreen> {
|
||||
: _FallbackIconBlock(
|
||||
color:
|
||||
widget.fallbackColor ??
|
||||
const Color(0xFF2F9E94),
|
||||
AppColors.teal,
|
||||
),
|
||||
const SizedBox(height: 10),
|
||||
if (hasSuggestedVideo) ...[
|
||||
@@ -317,7 +319,8 @@ class _QuizQuestionScreenState extends State<QuizQuestionScreen> {
|
||||
title:
|
||||
widget
|
||||
.suggestedVideoTitle ??
|
||||
'Vídeo',
|
||||
QuizUiStrings
|
||||
.videoFallbackTitle,
|
||||
description: '',
|
||||
videoPath: widget
|
||||
.suggestedVideoPath,
|
||||
@@ -328,13 +331,13 @@ class _QuizQuestionScreenState extends State<QuizQuestionScreen> {
|
||||
icon: const Icon(
|
||||
Icons
|
||||
.play_circle_outline_rounded,
|
||||
color: Color(0xFF2F9E94),
|
||||
color: AppColors.teal,
|
||||
),
|
||||
label: Text(
|
||||
widget.suggestedVideoTitle ??
|
||||
'Ver vídeo (opcional)',
|
||||
QuizUiStrings.watchOptionalVideo,
|
||||
style: const TextStyle(
|
||||
color: Color(0xFF2F9E94),
|
||||
color: AppColors.teal,
|
||||
fontWeight: FontWeight.w800,
|
||||
),
|
||||
),
|
||||
@@ -347,7 +350,7 @@ class _QuizQuestionScreenState extends State<QuizQuestionScreen> {
|
||||
style: const TextStyle(
|
||||
fontSize: 18,
|
||||
fontWeight: FontWeight.w900,
|
||||
color: Color(0xFFFF55A7),
|
||||
color: AppColors.pink,
|
||||
height: 1.2,
|
||||
),
|
||||
),
|
||||
@@ -355,11 +358,11 @@ class _QuizQuestionScreenState extends State<QuizQuestionScreen> {
|
||||
Text(
|
||||
widget.answerType ==
|
||||
QuizAnswerType.number
|
||||
? 'Insira o número'
|
||||
? QuizUiStrings.enterNumber
|
||||
: widget.answerType ==
|
||||
QuizAnswerType.yesNo
|
||||
? 'Escolha uma opção'
|
||||
: 'Escolha apenas uma opção',
|
||||
? QuizUiStrings.chooseOneOption
|
||||
: QuizUiStrings.chooseOnlyOneOption,
|
||||
textAlign: TextAlign.center,
|
||||
style: TextStyle(
|
||||
color: Colors.black.withValues(
|
||||
@@ -495,9 +498,7 @@ class _QuizQuestionScreenState extends State<QuizQuestionScreen> {
|
||||
style:
|
||||
FilledButton.styleFrom(
|
||||
backgroundColor:
|
||||
const Color(
|
||||
0xFFFF55A7,
|
||||
),
|
||||
AppColors.pink,
|
||||
foregroundColor:
|
||||
Colors.white,
|
||||
shape:
|
||||
@@ -628,8 +629,8 @@ class _QuizQuestionScreenState extends State<QuizQuestionScreen> {
|
||||
},
|
||||
child: Text(
|
||||
widget.isFinal
|
||||
? 'Concluir'
|
||||
: 'Avançar',
|
||||
? QuizUiStrings.finish
|
||||
: QuizUiStrings.advance,
|
||||
),
|
||||
),
|
||||
),
|
||||
@@ -643,9 +644,8 @@ class _QuizQuestionScreenState extends State<QuizQuestionScreen> {
|
||||
),
|
||||
TextButton(
|
||||
style: TextButton.styleFrom(
|
||||
foregroundColor: const Color(
|
||||
0xFF2F9E94,
|
||||
),
|
||||
foregroundColor:
|
||||
AppColors.teal,
|
||||
textStyle: const TextStyle(
|
||||
fontWeight: FontWeight.w800,
|
||||
),
|
||||
@@ -663,7 +663,7 @@ class _QuizQuestionScreenState extends State<QuizQuestionScreen> {
|
||||
(route) => route.isFirst,
|
||||
),
|
||||
child: const Text(
|
||||
'Voltar para homepage',
|
||||
QuizUiStrings.backToHomepage,
|
||||
),
|
||||
),
|
||||
],
|
||||
@@ -724,7 +724,7 @@ class _QuizQuestionScreenState extends State<QuizQuestionScreen> {
|
||||
style: const TextStyle(
|
||||
fontSize: 24,
|
||||
fontWeight: FontWeight.w900,
|
||||
color: Color(0xFF2F9E94),
|
||||
color: AppColors.teal,
|
||||
),
|
||||
decoration: const InputDecoration(
|
||||
border: InputBorder.none,
|
||||
@@ -750,10 +750,10 @@ class _QuizQuestionScreenState extends State<QuizQuestionScreen> {
|
||||
!_numberDontKnow) ...[
|
||||
const SizedBox(height: 10),
|
||||
Text(
|
||||
'Um número tão alto assim não é possível.\nO máximo é $_maxTeethCount.',
|
||||
QuizUiStrings.teethCountTooHigh(_maxTeethCount),
|
||||
textAlign: TextAlign.center,
|
||||
style: const TextStyle(
|
||||
color: Color(0xFFFF55A7),
|
||||
color: AppColors.pink,
|
||||
fontWeight: FontWeight.w700,
|
||||
fontSize: 12,
|
||||
),
|
||||
@@ -780,12 +780,12 @@ class _QuizQuestionScreenState extends State<QuizQuestionScreen> {
|
||||
),
|
||||
decoration: BoxDecoration(
|
||||
color: _numberDontKnow
|
||||
? const Color(0xFF2F9E94)
|
||||
? AppColors.teal
|
||||
: Colors.white.withValues(alpha: 0.70),
|
||||
borderRadius: BorderRadius.circular(999),
|
||||
border: Border.all(
|
||||
color: _numberDontKnow
|
||||
? const Color(0xFF2F9E94)
|
||||
? AppColors.teal
|
||||
: Colors.black.withValues(alpha: 0.12),
|
||||
),
|
||||
),
|
||||
@@ -801,7 +801,7 @@ class _QuizQuestionScreenState extends State<QuizQuestionScreen> {
|
||||
),
|
||||
const SizedBox(width: 6),
|
||||
Text(
|
||||
'Não sei',
|
||||
QuizUiStrings.dontKnow,
|
||||
style: TextStyle(
|
||||
fontWeight: FontWeight.w800,
|
||||
fontSize: 13,
|
||||
@@ -828,7 +828,7 @@ class _QuizAnswerTile extends StatelessWidget {
|
||||
required this.onTap,
|
||||
this.imageAspectRatio = 4 / 3,
|
||||
this.reveal = false,
|
||||
this.correctLabel = 'Posição certa',
|
||||
this.correctLabel = QuizUiStrings.defaultCorrectBadgeLabel,
|
||||
});
|
||||
|
||||
final QuizAnswer answer;
|
||||
@@ -848,9 +848,9 @@ class _QuizAnswerTile extends StatelessWidget {
|
||||
Widget build(BuildContext context) {
|
||||
final bool isCorrect = answer.weight == 1;
|
||||
final borderColor = reveal
|
||||
? (isCorrect ? const Color(0xFF2F9E94) : const Color(0xFFFF55A7))
|
||||
? (isCorrect ? AppColors.teal : AppColors.pink)
|
||||
: selected
|
||||
? const Color(0xFF2F9E94)
|
||||
? AppColors.teal
|
||||
: Colors.black.withValues(alpha: 0.12);
|
||||
final bg = selected
|
||||
? Colors.white.withValues(alpha: 0.88)
|
||||
@@ -934,7 +934,7 @@ class _QuizAnswerTile extends StatelessWidget {
|
||||
style: const TextStyle(
|
||||
fontWeight: FontWeight.w900,
|
||||
fontSize: 15,
|
||||
color: Color(0xFF2F9E94),
|
||||
color: AppColors.teal,
|
||||
),
|
||||
),
|
||||
],
|
||||
@@ -955,7 +955,7 @@ class _QuizAnswerTile extends StatelessWidget {
|
||||
width: 22,
|
||||
height: 22,
|
||||
decoration: const BoxDecoration(
|
||||
color: Color(0xFF2F9E94),
|
||||
color: AppColors.teal,
|
||||
shape: BoxShape.circle,
|
||||
),
|
||||
child: const Icon(
|
||||
@@ -981,8 +981,8 @@ class _QuizAnswerTile extends StatelessWidget {
|
||||
),
|
||||
decoration: BoxDecoration(
|
||||
color: isCorrect
|
||||
? const Color(0xFF2F9E94)
|
||||
: const Color(0xFFFF55A7),
|
||||
? AppColors.teal
|
||||
: AppColors.pink,
|
||||
borderRadius: BorderRadius.circular(999),
|
||||
boxShadow: [
|
||||
BoxShadow(
|
||||
@@ -1004,7 +1004,7 @@ class _QuizAnswerTile extends StatelessWidget {
|
||||
),
|
||||
const SizedBox(width: 4),
|
||||
Text(
|
||||
isCorrect ? correctLabel : 'Posição inadequada',
|
||||
isCorrect ? correctLabel : QuizUiStrings.incorrectBadgeLabel,
|
||||
style: const TextStyle(
|
||||
color: Colors.white,
|
||||
fontWeight: FontWeight.w800,
|
||||
@@ -1057,7 +1057,7 @@ class _QuestionReferenceImages extends StatelessWidget {
|
||||
borderRadius: BorderRadius.circular(999),
|
||||
),
|
||||
child: const Text(
|
||||
'Imagem de referência',
|
||||
QuizUiStrings.referenceImage,
|
||||
style: TextStyle(
|
||||
color: Colors.white,
|
||||
fontWeight: FontWeight.w700,
|
||||
@@ -1159,12 +1159,12 @@ class _QuizAnswerPill extends StatelessWidget {
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final accent = _isYes
|
||||
? const Color(0xFF2F9E94)
|
||||
? AppColors.teal
|
||||
: _isNo
|
||||
? const Color(0xFFFF55A7)
|
||||
? AppColors.pink
|
||||
: Colors.black.withValues(alpha: 0.35);
|
||||
final borderColor = selected
|
||||
? const Color(0xFF2F9E94)
|
||||
? AppColors.teal
|
||||
: Colors.black.withValues(alpha: 0.10);
|
||||
final helpVideo = _helpVideo;
|
||||
final showHelp = selected && helpVideo != null;
|
||||
@@ -1228,7 +1228,7 @@ class _QuizAnswerPill extends StatelessWidget {
|
||||
style: const TextStyle(
|
||||
fontWeight: FontWeight.w800,
|
||||
fontSize: 15,
|
||||
color: Color(0xFF2F9E94),
|
||||
color: AppColors.teal,
|
||||
),
|
||||
),
|
||||
),
|
||||
@@ -1239,11 +1239,11 @@ class _QuizAnswerPill extends StatelessWidget {
|
||||
decoration: BoxDecoration(
|
||||
shape: BoxShape.circle,
|
||||
color: selected
|
||||
? const Color(0xFF2F9E94)
|
||||
? AppColors.teal
|
||||
: Colors.transparent,
|
||||
border: Border.all(
|
||||
color: selected
|
||||
? const Color(0xFF2F9E94)
|
||||
? AppColors.teal
|
||||
: Colors.black.withValues(alpha: 0.25),
|
||||
width: 1.6,
|
||||
),
|
||||
@@ -1291,7 +1291,7 @@ class _HelpVideoButton extends StatelessWidget {
|
||||
return TapBounce(
|
||||
scale: 0.97,
|
||||
child: Material(
|
||||
color: const Color(0xFF2F9E94).withValues(alpha: 0.10),
|
||||
color: AppColors.teal.withValues(alpha: 0.10),
|
||||
borderRadius: BorderRadius.circular(14),
|
||||
child: InkWell(
|
||||
borderRadius: BorderRadius.circular(14),
|
||||
@@ -1302,23 +1302,23 @@ class _HelpVideoButton extends StatelessWidget {
|
||||
children: [
|
||||
const Icon(
|
||||
Icons.play_circle_fill_rounded,
|
||||
color: Color(0xFF2F9E94),
|
||||
color: AppColors.teal,
|
||||
size: 22,
|
||||
),
|
||||
const SizedBox(width: 10),
|
||||
Expanded(
|
||||
child: Text(
|
||||
'Não tem a certeza? Veja o "${video.title}" para ajudar a responder',
|
||||
QuizUiStrings.notSureSeeVideo(video.title),
|
||||
style: const TextStyle(
|
||||
fontWeight: FontWeight.w700,
|
||||
fontSize: 12.5,
|
||||
color: Color(0xFF2F9E94),
|
||||
color: AppColors.teal,
|
||||
),
|
||||
),
|
||||
),
|
||||
const Icon(
|
||||
Icons.chevron_right_rounded,
|
||||
color: Color(0xFF2F9E94),
|
||||
color: AppColors.teal,
|
||||
size: 20,
|
||||
),
|
||||
],
|
||||
|
||||
@@ -1,9 +1,12 @@
|
||||
import 'dart:async';
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import '../colors/app_colors.dart';
|
||||
|
||||
import '../main.dart' show supabase;
|
||||
import '../widgets/app_gradients.dart';
|
||||
import '../colors/app_gradients.dart';
|
||||
import '../strings/quiz_result_strings.dart';
|
||||
import '../strings/quiz_ui_strings.dart';
|
||||
import '../widgets/entrance.dart';
|
||||
import '../widgets/liquid_waves_background.dart';
|
||||
import '../widgets/tap_bounce.dart';
|
||||
@@ -106,20 +109,8 @@ class _QuizResultScreenState extends State<QuizResultScreen> {
|
||||
MaterialPageRoute<void>(
|
||||
builder: (_) => QuizVideoGuideScreen(
|
||||
youtubeId: _resultGuideYoutubeId,
|
||||
heading: 'Visualize o seguinte vídeo',
|
||||
caption:
|
||||
'Assista para compreender a importância de um diagnóstico '
|
||||
'precoce e de realizar tratamento ortodôntico intercetivo, '
|
||||
'ou seja, uma intervenção realizada na infância, tipicamente '
|
||||
'durante a fase de dentição mista (presença tanto de dentes '
|
||||
'de leite como de permanentes).\n\nO seu propósito é '
|
||||
'identificar, prevenir ou reduzir a gravidade de maloclusões '
|
||||
'e problemas no desenvolvimento dos maxilares enquanto os '
|
||||
'ossos e dentes ainda estão em crescimento.\n\nEsta '
|
||||
'intervenção aproveita a fase de desenvolvimento craniofacial '
|
||||
'para influenciar o crescimento ósseo, redirecionar a '
|
||||
'mandíbula, corrigir o alinhamento dos maxilares ou criar '
|
||||
'espaço para a erupção correta dos dentes permanentes.',
|
||||
heading: QuizResultStrings.watchTheFollowingVideo,
|
||||
caption: QuizResultStrings.resultVideoCaption,
|
||||
onAdvance: (context) =>
|
||||
Navigator.of(context).popUntil((r) => r.isFirst),
|
||||
),
|
||||
@@ -137,7 +128,7 @@ class _QuizResultScreenState extends State<QuizResultScreen> {
|
||||
body: Stack(
|
||||
clipBehavior: Clip.none,
|
||||
children: [
|
||||
Positioned.fill(child: Container(color: const Color(0xFFFAFAF7))),
|
||||
Positioned.fill(child: Container(color: AppColors.background)),
|
||||
const LiquidWavesBackground(),
|
||||
SafeArea(
|
||||
child: Center(
|
||||
@@ -157,12 +148,12 @@ class _QuizResultScreenState extends State<QuizResultScreen> {
|
||||
const SizedBox(height: 10),
|
||||
FadeSlideIn(
|
||||
child: const Text(
|
||||
'O resultado avaliado é de:',
|
||||
QuizResultStrings.resultHeading,
|
||||
textAlign: TextAlign.center,
|
||||
style: TextStyle(
|
||||
fontSize: 18,
|
||||
fontWeight: FontWeight.w900,
|
||||
color: Color(0xFFFF55A7),
|
||||
color: AppColors.pink,
|
||||
height: 1.2,
|
||||
),
|
||||
),
|
||||
@@ -177,15 +168,16 @@ class _QuizResultScreenState extends State<QuizResultScreen> {
|
||||
_ResultRing(
|
||||
value: signs,
|
||||
max: kSignsMax,
|
||||
color: const Color(0xFF2F9E94),
|
||||
color: AppColors.teal,
|
||||
label:
|
||||
'Sinais de má\noclusão instalados',
|
||||
QuizResultStrings.signsRingLabel,
|
||||
),
|
||||
_ResultRing(
|
||||
value: factors,
|
||||
max: kFactorsMax,
|
||||
color: const Color(0xFFFF55A7),
|
||||
label: 'Fatores de\nrisco associados',
|
||||
color: AppColors.pink,
|
||||
label:
|
||||
QuizResultStrings.factorsRingLabel,
|
||||
),
|
||||
],
|
||||
),
|
||||
@@ -194,14 +186,15 @@ class _QuizResultScreenState extends State<QuizResultScreen> {
|
||||
FadeSlideIn(
|
||||
delay: const Duration(milliseconds: 100),
|
||||
child: _ResultSection(
|
||||
heading: 'Conclusões:',
|
||||
body:
|
||||
'Foram identificados $signs de $kSignsMax '
|
||||
'sinais de má oclusão já instalada e '
|
||||
'$factors de $kFactorsMax fatores de '
|
||||
'risco frequentemente associados a '
|
||||
'má oclusão.',
|
||||
bodyColor: const Color(0xFFFF55A7),
|
||||
heading:
|
||||
QuizResultStrings.conclusionsHeading,
|
||||
body: QuizResultStrings.conclusionsBody(
|
||||
signs: signs,
|
||||
signsMax: kSignsMax,
|
||||
factors: factors,
|
||||
factorsMax: kFactorsMax,
|
||||
),
|
||||
bodyColor: AppColors.pink,
|
||||
bodyWeight: FontWeight.w800,
|
||||
),
|
||||
),
|
||||
@@ -209,19 +202,23 @@ class _QuizResultScreenState extends State<QuizResultScreen> {
|
||||
FadeSlideIn(
|
||||
delay: const Duration(milliseconds: 140),
|
||||
child: _ResultSection(
|
||||
heading: 'O que deve fazer agora',
|
||||
heading:
|
||||
QuizResultStrings.whatToDoNowHeading,
|
||||
body: recommend
|
||||
? 'Com base neste resultado, recomendamos a marcação de uma consulta com Odontopediatra ou Ortodontista para uma avaliação presencial.'
|
||||
: 'Não foram encontrados sinais ou fatores de risco relevantes. Continue a acompanhar a saúde oral do seu filho/a com as consultas de rotina habituais.',
|
||||
? QuizResultStrings
|
||||
.whatToDoNowRecommend
|
||||
: QuizResultStrings
|
||||
.whatToDoNowNoConcerns,
|
||||
),
|
||||
),
|
||||
const SizedBox(height: 16),
|
||||
FadeSlideIn(
|
||||
delay: const Duration(milliseconds: 180),
|
||||
child: _ResultSection(
|
||||
heading: 'Importante saber',
|
||||
body:
|
||||
'Este resultado não substitui uma avaliação presencial, nem tem função de diagnóstico. O objetivo é ajudá-lo a estar mais atento aos sinais identificados e a não adiar uma consulta que pode fazer a diferença no desenvolvimento oral do seu filho/a.',
|
||||
heading: QuizResultStrings
|
||||
.importantToKnowHeading,
|
||||
body: QuizResultStrings
|
||||
.importantToKnowBody,
|
||||
),
|
||||
),
|
||||
],
|
||||
@@ -254,7 +251,7 @@ class _QuizResultScreenState extends State<QuizResultScreen> {
|
||||
if (!context.mounted) return;
|
||||
_goToVideo();
|
||||
},
|
||||
child: const Text('Avançar'),
|
||||
child: const Text(QuizUiStrings.advance),
|
||||
),
|
||||
),
|
||||
),
|
||||
|
||||
@@ -1,12 +1,14 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import '../colors/app_colors.dart';
|
||||
import 'package:youtube_player_flutter/youtube_player_flutter.dart';
|
||||
|
||||
import '../strings/quiz_ui_strings.dart';
|
||||
import '../widgets/entrance.dart';
|
||||
import '../widgets/liquid_waves_background.dart';
|
||||
import '../widgets/tap_bounce.dart';
|
||||
|
||||
const Color _pink = Color(0xFFFF55A7);
|
||||
const Color _teal = Color(0xFF2F9E94);
|
||||
const Color _pink = AppColors.pink;
|
||||
const Color _teal = AppColors.teal;
|
||||
|
||||
/// Player do YouTube incorporado (sem AppBar/tela cheia própria) — usado
|
||||
/// tanto no ecrã intersticial [QuizVideoGuideScreen] como embutido
|
||||
@@ -78,9 +80,9 @@ class QuizVideoGuideScreen extends StatefulWidget {
|
||||
super.key,
|
||||
required this.youtubeId,
|
||||
required this.onAdvance,
|
||||
this.heading = 'Antes de continuar, veja o vídeo educativo...',
|
||||
this.heading = QuizUiStrings.defaultVideoGuideHeading,
|
||||
this.caption =
|
||||
'Veja o vídeo para compreender melhor as próximas perguntas do questionário.',
|
||||
QuizUiStrings.defaultVideoGuideCaption,
|
||||
this.extraHeading,
|
||||
this.extraSubtitle,
|
||||
});
|
||||
@@ -122,7 +124,7 @@ class _QuizVideoGuideScreenState extends State<QuizVideoGuideScreen> {
|
||||
body: Stack(
|
||||
clipBehavior: Clip.none,
|
||||
children: [
|
||||
Positioned.fill(child: Container(color: const Color(0xFFFAFAF7))),
|
||||
Positioned.fill(child: Container(color: AppColors.background)),
|
||||
const LiquidWavesBackground(),
|
||||
SafeArea(
|
||||
child: Padding(
|
||||
@@ -135,7 +137,7 @@ class _QuizVideoGuideScreenState extends State<QuizVideoGuideScreen> {
|
||||
child: TextButton(
|
||||
onPressed: _advance,
|
||||
child: const Text(
|
||||
'Pular',
|
||||
QuizUiStrings.skip,
|
||||
style: TextStyle(
|
||||
color: Colors.black45,
|
||||
fontWeight: FontWeight.w700,
|
||||
@@ -243,7 +245,7 @@ class _QuizVideoGuideScreenState extends State<QuizVideoGuideScreen> {
|
||||
),
|
||||
),
|
||||
onPressed: _videoWatched ? _advance : null,
|
||||
child: const Text('Avançar'),
|
||||
child: const Text(QuizUiStrings.advance),
|
||||
),
|
||||
),
|
||||
),
|
||||
|
||||
Reference in New Issue
Block a user