CKT String|Colors
This commit is contained in:
38
lib/strings/auth_strings.dart
Normal file
38
lib/strings/auth_strings.dart
Normal file
@@ -0,0 +1,38 @@
|
||||
/// Texto do ecrã de login/criação de conta ([HomeScreen]).
|
||||
class AuthStrings {
|
||||
const AuthStrings._();
|
||||
|
||||
static const String appTitle = 'Check-Teeth Kids';
|
||||
static const String appSubtitle =
|
||||
'Deteção e Prevenção da Má Oclusão Infantil';
|
||||
|
||||
static const String login = 'Entrar';
|
||||
static const String createAccount = 'Criar Conta';
|
||||
|
||||
static const String nameHint = 'Introduza o seu nome';
|
||||
static const String nameRequired = 'Indique o seu nome';
|
||||
static const String nameTooShort = 'Nome muito curto';
|
||||
static const String nameNoNumbers = 'O nome não pode conter números';
|
||||
|
||||
static const String emailHint = 'Introduza o seu email';
|
||||
static const String emailRequired = 'Indique o seu email';
|
||||
static const String emailInvalid = 'Email inválido';
|
||||
|
||||
static const String passwordHint = 'Introduza a sua palavra-passe';
|
||||
static const String passwordRequired = 'Indique a sua palavra-passe';
|
||||
static const String passwordTooShort = 'Mínimo de 6 caracteres';
|
||||
|
||||
static const String userNotFoundAfterSignUp =
|
||||
'Utilizador não encontrado após criar a conta.';
|
||||
static const String accountNoLongerExists =
|
||||
'Esta conta já não existe. Verifique o email ou crie uma nova conta.';
|
||||
static const String timeoutError =
|
||||
'Tempo esgotado. Verifique a sua ligação e tente novamente.';
|
||||
static const String invalidCredentials = 'Email ou palavra-passe incorretos.';
|
||||
static const String userNotFound = 'Utilizador não encontrado.';
|
||||
static const String emailAlreadyInUse = 'Este email já está em uso.';
|
||||
static const String weakPassword =
|
||||
'Palavra-passe fraca. Utilize pelo menos 6 caracteres.';
|
||||
|
||||
static String genericError(Object e) => 'Erro: $e';
|
||||
}
|
||||
7
lib/strings/common_strings.dart
Normal file
7
lib/strings/common_strings.dart
Normal file
@@ -0,0 +1,7 @@
|
||||
/// Texto de interface genérico, partilhado por widgets reutilizáveis que não
|
||||
/// pertencem a um ecrã específico (ex.: [showConfirmDialog]).
|
||||
class CommonStrings {
|
||||
const CommonStrings._();
|
||||
|
||||
static const String cancel = 'Cancelar';
|
||||
}
|
||||
18
lib/strings/credits_strings.dart
Normal file
18
lib/strings/credits_strings.dart
Normal file
@@ -0,0 +1,18 @@
|
||||
/// Texto fixo do ecrã de créditos ([CreditsScreen]) — os nomes próprios e
|
||||
/// da instituição em [_kCreditSections] ficam de fora de propósito (não são
|
||||
/// texto de interface a traduzir, são dados/factos).
|
||||
class CreditsStrings {
|
||||
const CreditsStrings._();
|
||||
|
||||
static const String pageTitle = 'Criadores e Colaboradores';
|
||||
static const String header = 'Quem fez a Check-Teeth Kids';
|
||||
|
||||
static const String originalCreatorSection = 'Criadora original';
|
||||
static const String developmentSection = 'Desenvolvimento informático';
|
||||
static const String advisorsSection = 'Orientadores';
|
||||
static const String institutionSection = 'Instituição colaboradora';
|
||||
|
||||
static const String originalCreatorRole = 'Criadora original';
|
||||
static const String developerRole = 'Desenvolvedor';
|
||||
static const String advisorRole = 'Orientador(a)';
|
||||
}
|
||||
16
lib/strings/curiosidade_strings.dart
Normal file
16
lib/strings/curiosidade_strings.dart
Normal file
@@ -0,0 +1,16 @@
|
||||
/// Texto do ecrã de curiosidades ([CuriosidadeScreen]).
|
||||
class CuriosidadeStrings {
|
||||
const CuriosidadeStrings._();
|
||||
|
||||
static const String pageTitle = 'Curiosidades';
|
||||
static const String close = 'Fechar';
|
||||
|
||||
static const String topicXTitle = 'Tema X';
|
||||
static const String topicXDescription =
|
||||
'Aprenda dicas rápidas e simples para cuidar dos dentes no dia a dia.';
|
||||
|
||||
static const String topicYTitle = 'Tema Y';
|
||||
static const String topicZTitle = 'Tema Z';
|
||||
static const String topicUTitle = 'Tema U';
|
||||
static const String contentComingSoon = 'Conteúdo em breve.';
|
||||
}
|
||||
109
lib/strings/home_strings.dart
Normal file
109
lib/strings/home_strings.dart
Normal file
@@ -0,0 +1,109 @@
|
||||
/// Texto do ecrã principal depois de autenticado ([LoggedHomeScreen] e as
|
||||
/// suas três abas: Início, Perfil, Ajustes).
|
||||
class HomeStrings {
|
||||
const HomeStrings._();
|
||||
|
||||
static const String noName = 'Sem nome';
|
||||
static const String goodMorning = 'Bom dia';
|
||||
static const String goodAfternoon = 'Boa tarde';
|
||||
static const String goodEvening = 'Boa noite';
|
||||
|
||||
static const String navHome = 'Início';
|
||||
static const String navProfile = 'Perfil';
|
||||
static const String navSettings = 'Ajustes';
|
||||
static const String settingsTitle = 'Configurações';
|
||||
|
||||
static const String signsGaugeLabel = 'Sinais de má\noclusão';
|
||||
static const String factorsGaugeLabel = 'Fatores de risco';
|
||||
|
||||
static String forChild(String name) => 'Para $name';
|
||||
|
||||
static const String educationalVideos = 'Vídeos educativos';
|
||||
static const String moreFeaturesSoon = 'Mais funcionalidades em breve';
|
||||
|
||||
static String brushingLimitReached(int maxPerDay) =>
|
||||
'Já registou as $maxPerDay escovagens de hoje!';
|
||||
static const String brushingLogged = 'Escovagem registada!';
|
||||
static const String brushingThisWeek = 'Escovagens esta semana';
|
||||
static const String completedEpisodes = 'Episódios completos';
|
||||
|
||||
static String errorAddingChild(Object e) => 'Erro ao adicionar criança: $e';
|
||||
static const String registerAChild = 'Registe uma criança';
|
||||
static const String registerAChildMessage =
|
||||
'Antes de iniciar o quiz, adicione uma criança ao seu perfil.';
|
||||
static const String addChild = 'Adicionar criança';
|
||||
static const String whichChildIsTheQuizFor = 'Para qual criança é o quiz?';
|
||||
static String childNameWithAge(String name, int age) => '$name • $age anos';
|
||||
static const String cancel = 'Cancelar';
|
||||
|
||||
static const String freeAssessmentBadge = 'Avaliação gratuita';
|
||||
static const String assessmentTitle = 'Avaliação de má oclusão dentária';
|
||||
static const String assessmentSubtitle =
|
||||
'29 perguntas rápidas · menos de 3 minutos';
|
||||
static const String startQuiz = 'Iniciar Quiz';
|
||||
|
||||
static const String videoLibraryBadge = 'Biblioteca de vídeos';
|
||||
static String watchedEpisodesSummary(int watchedCount, int totalCount) =>
|
||||
'$watchedCount episódio${watchedCount == 1 ? '' : 's'} completo${watchedCount == 1 ? '' : 's'} · $totalCount no total';
|
||||
static String allEpisodesSummary(int totalCount) =>
|
||||
'$totalCount episódios sobre saúde oral para toda a família';
|
||||
static const String watchVideos = 'Ver vídeos';
|
||||
|
||||
static const String profilePhoto = 'Foto de perfil';
|
||||
static const String camera = 'Câmara';
|
||||
static const String gallery = 'Galeria';
|
||||
static String errorUploadingPhoto(Object e) => 'Erro ao enviar foto: $e';
|
||||
|
||||
static const String removeChild = 'Remover criança';
|
||||
static String removeChildConfirmMessage(String childName) =>
|
||||
'Tem a certeza que quer remover "$childName"? Esta ação não pode ser desfeita.';
|
||||
static const String remove = 'Remover';
|
||||
static const String noPermissionToRemoveChild =
|
||||
'Sem permissão para remover esta criança.';
|
||||
static const String childRemoved = 'Criança removida';
|
||||
static String errorRemovingChild(Object e) => 'Erro ao remover: $e';
|
||||
|
||||
static String weeklyGoalOf(String childName) => 'Meta semanal de $childName';
|
||||
static const String brushingsPerWeek = 'Escovagens por semana';
|
||||
static const String brushingGoalRange = 'Entre 1 e 21 (até 3 por dia)';
|
||||
static const String save = 'Guardar';
|
||||
|
||||
static const String childAdded = 'Criança adicionada';
|
||||
static const String addAnotherChildQuestion = 'Adicionar outra criança?';
|
||||
static const String notNow = 'Agora não';
|
||||
static const String addAnother = 'Adicionar outra';
|
||||
static const String timeoutAdding =
|
||||
'Tempo esgotado ao adicionar. Tente novamente.';
|
||||
static String errorAdding(Object e) => 'Erro ao adicionar: $e';
|
||||
|
||||
static const String myChildren = 'Meus filhos';
|
||||
static const String noChildrenYet = 'Nenhuma criança adicionada ainda.';
|
||||
static String childFallbackName(int index) => 'Criança ${index + 1}';
|
||||
static String ageLabel(int age) => 'Idade: $age';
|
||||
static String genderLabel(String gender) => 'Género: $gender';
|
||||
static const String weeklyBrushingGoalTooltip = 'Meta semanal de escovagens';
|
||||
|
||||
static const String signOut = 'Sair';
|
||||
static const String addAnotherChildTitle = 'Adicionar outra criança';
|
||||
static const String birthDate = 'Data de nascimento';
|
||||
static const String confirm = 'Confirmar';
|
||||
static const String childName = 'Nome da criança';
|
||||
static const String nameRequired = 'Indique o nome';
|
||||
static const String nameTooShort = 'Nome muito curto';
|
||||
static const String nameNoNumbers = 'O nome não pode conter números';
|
||||
static const String selectDate = 'Selecione a data';
|
||||
static const String male = 'Masculino';
|
||||
static const String female = 'Feminino';
|
||||
static const String other = 'Outro';
|
||||
static const String gender = 'Género';
|
||||
static const String genderRequired = 'Selecione o género';
|
||||
static const String birthDateRequired = 'Indique a data de nascimento';
|
||||
static const String add = 'Adicionar';
|
||||
|
||||
static const String childCode = 'Código numérico';
|
||||
static const String childCodeRequired = 'Indique o código';
|
||||
static const String childCodeDigitsOnly = 'O código só pode conter números';
|
||||
static const String childCodeAlreadyInUse =
|
||||
'Este código já está atribuído a outra criança';
|
||||
static String codeLabel(String code) => 'Cód. $code';
|
||||
}
|
||||
23
lib/strings/privacy_strings.dart
Normal file
23
lib/strings/privacy_strings.dart
Normal file
@@ -0,0 +1,23 @@
|
||||
/// Texto fixo da Política de Privacidade, mostrado no ecrã de bloqueio no
|
||||
/// cadastro ([PrivacyGateScreen]).
|
||||
class PrivacyStrings {
|
||||
const PrivacyStrings._();
|
||||
|
||||
static const String headerTitle = 'Política de Privacidade';
|
||||
static const String acceptAll = 'Aceitar tudo';
|
||||
static const String advance = 'Avançar';
|
||||
static const String requiredPrefix = '(Obrigatório) ';
|
||||
static const String optionalPrefix = '(Opcional) ';
|
||||
|
||||
static const String healthDataConsent =
|
||||
'Confirmo que sou encarregado(a) de educação ou responsável legal '
|
||||
'da criança avaliada e concordo com o processamento dos dados de '
|
||||
'saúde que introduzo na Check-Teeth Kids, exclusivamente para gerar '
|
||||
'o resultado da triagem digital.';
|
||||
static const String privacyPolicyConsent =
|
||||
'Li e aceito os Termos e Condições apresentados anteriormente e as '
|
||||
'condições de privacidade descritas nesta página.';
|
||||
static const String trackingConsent =
|
||||
'Ajude-nos a melhorar a Check-Teeth Kids, autorizando a recolha de '
|
||||
'dados técnicos de utilização.';
|
||||
}
|
||||
47
lib/strings/quiz_result_strings.dart
Normal file
47
lib/strings/quiz_result_strings.dart
Normal file
@@ -0,0 +1,47 @@
|
||||
/// Texto do ecrã de resultado do quiz ([QuizResultScreen]) e do vídeo-guia
|
||||
/// mostrado logo a seguir.
|
||||
class QuizResultStrings {
|
||||
const QuizResultStrings._();
|
||||
|
||||
static const String resultHeading = 'O resultado avaliado é de:';
|
||||
static const String signsRingLabel = 'Sinais de má\noclusão instalados';
|
||||
static const String factorsRingLabel = 'Fatores de\nrisco associados';
|
||||
|
||||
static const String conclusionsHeading = 'Conclusões:';
|
||||
static String conclusionsBody({
|
||||
required int signs,
|
||||
required int signsMax,
|
||||
required int factors,
|
||||
required int factorsMax,
|
||||
}) =>
|
||||
'Foram identificados $signs de $signsMax '
|
||||
'sinais de má oclusão já instalada e '
|
||||
'$factors de $factorsMax fatores de '
|
||||
'risco frequentemente associados a '
|
||||
'má oclusão.';
|
||||
|
||||
static const String whatToDoNowHeading = 'O que deve fazer agora';
|
||||
static const String whatToDoNowRecommend =
|
||||
'Com base neste resultado, recomendamos a marcação de uma consulta com Odontopediatra ou Ortodontista para uma avaliação presencial.';
|
||||
static const String whatToDoNowNoConcerns =
|
||||
'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.';
|
||||
|
||||
static const String importantToKnowHeading = 'Importante saber';
|
||||
static const String importantToKnowBody =
|
||||
'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.';
|
||||
|
||||
static const String watchTheFollowingVideo = 'Visualize o seguinte vídeo';
|
||||
static const String resultVideoCaption =
|
||||
'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.';
|
||||
}
|
||||
254
lib/strings/quiz_strings.dart
Normal file
254
lib/strings/quiz_strings.dart
Normal file
@@ -0,0 +1,254 @@
|
||||
/// Todo o texto do quiz de triagem (checklist inicial + 29 perguntas).
|
||||
/// Para traduzir o quiz, é só editar os valores aqui — nenhum texto de
|
||||
/// pergunta/resposta deve viver directamente dentro de `quiz1.dart`.
|
||||
class QuizStrings {
|
||||
const QuizStrings._();
|
||||
|
||||
// Ecrã de checklist inicial.
|
||||
static const String checklistHeading = 'Vamos ajudá-lo/a a compreender:';
|
||||
static const String checklistItem1 =
|
||||
'Sinais de alerta podem passar despercebidos';
|
||||
static const String checklistItem2 = 'Prevenir é melhor do que tratar';
|
||||
static const String checklistItem3 =
|
||||
'Quando deve procurar um dentista (urgência vs vigilância)';
|
||||
|
||||
// Rótulos partilhados pelas perguntas Sim/Não.
|
||||
static const String yes = 'Sim';
|
||||
static const String no = 'Não';
|
||||
static const String dontKnow = 'Não sei';
|
||||
static const String dontKnowDescription = 'Não tenho a certeza';
|
||||
|
||||
// Pergunta 1: Problemas respiratórios
|
||||
static const String q1Question =
|
||||
'O seu filho/a tem problemas respiratórios diagnosticados?';
|
||||
static const String q1YesDescription =
|
||||
'Problemas respiratórios diagnosticados';
|
||||
static const String q1NoDescription =
|
||||
'Sem problemas respiratórios diagnosticados';
|
||||
|
||||
// Pergunta 2: Respira pela boca
|
||||
static const String q2Question =
|
||||
'O seu filho/a respira habitualmente pela boca?';
|
||||
static const String q2YesDescription = 'Respira habitualmente pela boca';
|
||||
static const String q2NoDescription = 'Não respira habitualmente pela boca';
|
||||
|
||||
// Pergunta 3: Ressonar
|
||||
static const String q3Question =
|
||||
'O seu filho/a ressona habitualmente durante a noite?';
|
||||
static const String q3YesDescription =
|
||||
'Ressonar habitualmente durante a noite';
|
||||
static const String q3NoDescription = 'Não ressona habitualmente';
|
||||
|
||||
// Pergunta 4: Nariz tapado
|
||||
static const String q4Question =
|
||||
'O seu filho/a sente habitualmente o nariz "tapado"?';
|
||||
static const String q4YesDescription = 'Sente habitualmente o nariz tapado';
|
||||
static const String q4NoDescription =
|
||||
'Não sente habitualmente o nariz tapado';
|
||||
|
||||
// Pergunta 5: Interrupções da respiração
|
||||
static const String q5Question =
|
||||
'Durante o sono, o seu filho/a tem habitualmente interrupções da respiração?';
|
||||
static const String q5YesDescription =
|
||||
'Tem habitualmente interrupções da respiração durante o sono';
|
||||
static const String q5NoDescription =
|
||||
'Não tem interrupções da respiração durante o sono';
|
||||
|
||||
// Pergunta 6: Range os dentes
|
||||
static const String q6Question =
|
||||
'O seu filho/a range os dentes com frequência?';
|
||||
static const String q6YesDescription = 'Range os dentes com frequência';
|
||||
static const String q6NoDescription = 'Não range os dentes com frequência';
|
||||
|
||||
// Pergunta 7: Alergias sazonais
|
||||
static const String q7Question =
|
||||
'O seu filho/a habitualmente tem alergias sazonais?';
|
||||
static const String q7YesDescription = 'Habitualmente tem alergias sazonais';
|
||||
static const String q7NoDescription = 'Não tem alergias sazonais';
|
||||
|
||||
// Pergunta 8: Saliva seca
|
||||
static const String q8Question =
|
||||
'O seu filho/a acorda com saliva seca na cara ou na almofada?';
|
||||
static const String q8YesDescription =
|
||||
'Acorda com saliva seca na cara ou na almofada';
|
||||
static const String q8NoDescription = 'Não acorda com saliva seca';
|
||||
|
||||
// Pergunta 9: Otites
|
||||
static const String q9Question =
|
||||
'O seu filho/a teve ou costuma ter com frequência otites?';
|
||||
static const String q9YesDescription =
|
||||
'Teve ou costuma ter com frequência otites';
|
||||
static const String q9NoDescription = 'Não teve ou não costuma ter otites';
|
||||
|
||||
// Pergunta 10: Amigdalites
|
||||
static const String q10Question =
|
||||
'O seu filho/a teve ou costuma ter com frequência amigdalites?';
|
||||
static const String q10YesDescription =
|
||||
'Teve ou costuma ter com frequência amigdalites';
|
||||
static const String q10NoDescription =
|
||||
'Não teve ou não costuma ter amigdalites';
|
||||
|
||||
// Pergunta 11: Bronquiolites
|
||||
static const String q11Question =
|
||||
'O seu filho/a teve ou costuma ter com frequência bronquiolites?';
|
||||
static const String q11YesDescription =
|
||||
'Teve ou costuma ter com frequência bronquiolites';
|
||||
static const String q11NoDescription =
|
||||
'Não teve ou não costuma ter bronquiolites';
|
||||
|
||||
// Pergunta 12: Dificuldades a mastigar
|
||||
static const String q12Question =
|
||||
'O seu filho/a apresenta dificuldades a mastigar?';
|
||||
static const String q12YesDescription = 'Apresenta dificuldades a mastigar';
|
||||
static const String q12NoDescription = 'Não apresenta dificuldades a mastigar';
|
||||
|
||||
// Pergunta 13: Lento a comer
|
||||
static const String q13Question = 'O seu filho/a habitualmente é lento a comer?';
|
||||
static const String q13YesDescription = 'Habitualmente é lento a comer';
|
||||
static const String q13NoDescription = 'Não é lento a comer';
|
||||
|
||||
// Pergunta 14: Prefere alimentos moles
|
||||
static const String q14Question =
|
||||
'O seu filho/a habitualmente prefere comer alimentos moles?';
|
||||
static const String q14YesDescription =
|
||||
'Habitualmente prefere comer alimentos moles';
|
||||
static const String q14NoDescription = 'Não prefere alimentos moles';
|
||||
|
||||
// Pergunta 15: Alimentado por biberão
|
||||
static const String q15Question = 'Em bebé apenas foi alimentado por biberão?';
|
||||
static const String q15YesDescription =
|
||||
'Em bebé apenas foi alimentado por biberão';
|
||||
static const String q15NoDescription = 'Não foi apenas alimentado por biberão';
|
||||
|
||||
// Pergunta 16: Chupeta
|
||||
static const String q16Question =
|
||||
'O seu filho/a usa ou usou chupeta com frequência?';
|
||||
static const String q16YesDescription = 'Usa ou usou chupeta com frequência';
|
||||
static const String q16NoDescription =
|
||||
'Não usa ou não usou chupeta com frequência';
|
||||
|
||||
// Pergunta 17: Chucha o dedo
|
||||
static const String q17Question =
|
||||
'O seu filho/a chucha ou já chuchou o dedo com frequência?';
|
||||
static const String q17YesDescription =
|
||||
'Chucha ou já chuchou o dedo com frequência';
|
||||
static const String q17NoDescription =
|
||||
'Não chucha ou não chuchou o dedo com frequência';
|
||||
|
||||
// Pergunta 18: Postura (imagem)
|
||||
static const String q18Question =
|
||||
'Qual das seguintes imagens é mais parecida com a postura do seu filho/a?';
|
||||
static const String q18Answer1Title = 'Postura inadequada';
|
||||
static const String q18Answer1Description =
|
||||
'Postura curvada, ombros e pescoço projetados';
|
||||
static const String q18Answer2Title = 'Postura correta';
|
||||
static const String q18Answer2Description = 'Postura ereta, coluna alinhada';
|
||||
|
||||
// Pergunta 19: Perfil (imagem)
|
||||
static const String q19Question =
|
||||
'Qual das seguintes imagens é mais parecida com o perfil do seu filho/a?';
|
||||
static const String q19Answer1Title = 'Perfil convexo';
|
||||
static const String q19Answer1Description = 'Perfil facial convexo';
|
||||
static const String q19Answer2Title = 'Perfil reto';
|
||||
static const String q19Answer2Description = 'Perfil facial reto';
|
||||
static const String q19Answer3Title = 'Perfil côncavo';
|
||||
static const String q19Answer3Description = 'Perfil facial côncavo';
|
||||
|
||||
// Pergunta 20: Boca habitual (imagem)
|
||||
static const String q20Question =
|
||||
'Qual é a posição da boca do seu filho/a habitualmente?';
|
||||
static const String q20Answer1Title = 'Boca fechada';
|
||||
static const String q20Answer1Description = 'Boca fechada habitualmente';
|
||||
static const String q20Answer2Title = 'Boca entreaberta';
|
||||
static const String q20Answer2Description = 'Boca entreaberta habitualmente';
|
||||
|
||||
// Pergunta 21: Zona abaixo dos olhos (imagem)
|
||||
static const String q21Question =
|
||||
'Qual das imagens, na zona abaixo dos olhos, se assemelha mais ao seu filho/a?';
|
||||
static const String q21Answer1Title = 'Sem sinais';
|
||||
static const String q21Answer1Description = 'Sem olheiras visíveis abaixo dos olhos';
|
||||
static const String q21Answer2Title = 'Sinal de risco';
|
||||
static const String q21Answer2Description = 'Olheiras visíveis abaixo dos olhos';
|
||||
|
||||
// Pergunta 22: Queixo com a boca fechada (imagem)
|
||||
static const String q22Question =
|
||||
'Qual das imagens é mais parecida com o queixo do seu filho/a com a boca fechada?';
|
||||
static const String q22Answer1Title = 'Queixo relaxado';
|
||||
static const String q22Answer1Description =
|
||||
'Queixo liso e relaxado com a boca fechada';
|
||||
static const String q22Answer2Title = 'Queixo tenso';
|
||||
static const String q22Answer2Description =
|
||||
'Queixo tenso/franzido com a boca fechada';
|
||||
|
||||
// Pergunta 23: Boca / dentição (imagem)
|
||||
static const String q23Question =
|
||||
'Qual das seguintes imagens se assemelha à boca do seu filho/a?';
|
||||
static const String q23Answer1Title = 'Dentição sobreposta';
|
||||
static const String q23Answer1Description = 'Dentes sobrepostos/tortos';
|
||||
static const String q23Answer2Title = 'Dentição alinhada';
|
||||
static const String q23Answer2Description =
|
||||
'Dentição bem alinhada, sem apinhamento';
|
||||
static const String q23Answer3Title = 'Dentição desalinhada';
|
||||
static const String q23Answer3Description = 'Dentição desalinhada/apinhada';
|
||||
|
||||
// Pergunta 24: Apinhamento visto de perto (imagem)
|
||||
static const String q24Question =
|
||||
'Qual das seguintes imagens se assemelha à boca do seu filho/a?';
|
||||
static const String q24Answer1Title = 'Apinhamento moderado';
|
||||
static const String q24Answer1Description =
|
||||
'Dentes rodados/desalinhados de forma mais visível';
|
||||
static const String q24Answer2Title = 'Ligeiro desalinhamento';
|
||||
static const String q24Answer2Description =
|
||||
'Pequeno desalinhamento ou espaço entre alguns dentes';
|
||||
static const String q24Answer3Title = 'Apinhamento acentuado';
|
||||
static const String q24Answer3Description = 'Dentes muito sobrepostos entre si';
|
||||
|
||||
// Pergunta 25: Freio labial (imagem)
|
||||
static const String q25Question =
|
||||
'Qual das seguintes imagens se assemelha ao freio labial do seu filho/a?';
|
||||
static const String q25Answer1Title = 'Freio labial correto';
|
||||
static const String q25Answer1Description = 'Inserção do freio labial mais alta';
|
||||
static const String q25Answer2Title = 'Freio labial inadequado';
|
||||
static const String q25Answer2Description =
|
||||
'Inserção do freio labial baixa, entre os dentes';
|
||||
|
||||
// Pergunta 26: Freio lingual (imagem)
|
||||
static const String q26Question =
|
||||
'Qual das seguintes imagens se assemelha ao freio lingual do seu filho/a?';
|
||||
static const String q26Answer1Title = 'Freio lingual inadequado';
|
||||
static const String q26Answer1Description =
|
||||
'Freio lingual curto/apertado (língua em coração)';
|
||||
static const String q26Answer2Title = 'Freio lingual correto';
|
||||
static const String q26Answer2Description =
|
||||
'Língua move-se livremente, sem restrição visível';
|
||||
|
||||
// Pergunta 27: Boca / dentição 3 (imagem)
|
||||
static const String q27Question =
|
||||
'Qual das seguintes imagens se assemelha com a boca do seu filho/a?';
|
||||
static const String q27Answer1Title = 'Dentição desalinhada';
|
||||
static const String q27Answer1Description = 'Dentição desalinhada/apinhada';
|
||||
static const String q27Answer2Title = 'Dentição sobreposta';
|
||||
static const String q27Answer2Description = 'Dentes sobrepostos/tortos';
|
||||
static const String q27Answer3Title = 'Dentição alinhada';
|
||||
static const String q27Answer3Description =
|
||||
'Dentição bem alinhada, sem apinhamento';
|
||||
|
||||
// Pergunta 28: Boca / dentição 2 (imagem)
|
||||
static const String q28Question =
|
||||
'Qual das seguintes imagens se assemelha à boca do seu filho/a?';
|
||||
static const String q28Answer1Title = 'Dentição alinhada';
|
||||
static const String q28Answer1Description =
|
||||
'Dentição bem alinhada, sem apinhamento';
|
||||
static const String q28Answer2Title = 'Dentição desalinhada';
|
||||
static const String q28Answer2Description = 'Dentes sobrepostos/apinhados';
|
||||
|
||||
// Pergunta 29: Céu da boca (imagem, final)
|
||||
static const String q29Question =
|
||||
'Qual das seguintes imagens se assemelha ao céu da boca do seu filho/a?';
|
||||
static const String q29CorrectBadgeLabel = 'Posição saudável';
|
||||
static const String q29Answer1Title = 'Posição profunda incorreta';
|
||||
static const String q29Answer1Description =
|
||||
'Palato estreito/profundo, em forma de V';
|
||||
static const String q29Answer2Title = 'Posição em U saudável';
|
||||
static const String q29Answer2Description = 'Palato largo, em forma de U';
|
||||
}
|
||||
36
lib/strings/quiz_ui_strings.dart
Normal file
36
lib/strings/quiz_ui_strings.dart
Normal file
@@ -0,0 +1,36 @@
|
||||
/// Texto fixo da "moldura" do quiz (botões, validações, selos) — separado
|
||||
/// de [QuizStrings], que tem só o conteúdo das perguntas/respostas.
|
||||
class QuizUiStrings {
|
||||
const QuizUiStrings._();
|
||||
|
||||
static const String defaultCorrectBadgeLabel = 'Posição certa';
|
||||
static const String incorrectBadgeLabel = 'Posição inadequada';
|
||||
static const String referenceImage = 'Imagem de referência';
|
||||
|
||||
static const String videoFallbackTitle = 'Vídeo';
|
||||
static const String watchOptionalVideo = 'Ver vídeo (opcional)';
|
||||
|
||||
static const String enterNumber = 'Insira o número';
|
||||
static const String chooseOneOption = 'Escolha uma opção';
|
||||
static const String chooseOnlyOneOption = 'Escolha apenas uma opção';
|
||||
|
||||
static const String finish = 'Concluir';
|
||||
static const String advance = 'Avançar';
|
||||
static const String backToHomepage = 'Voltar para homepage';
|
||||
|
||||
static const String dontKnow = 'Não sei';
|
||||
|
||||
static const String skip = 'Pular';
|
||||
static const String defaultVideoGuideHeading =
|
||||
'Antes de continuar, veja o vídeo educativo...';
|
||||
static const String defaultVideoGuideCaption =
|
||||
'Veja o vídeo para compreender melhor as próximas perguntas do questionário.';
|
||||
|
||||
static String teethCountTooHigh(int max) =>
|
||||
'Um número tão alto assim não é possível.\nO máximo é $max.';
|
||||
|
||||
static String notSureSeeVideo(String videoTitle) =>
|
||||
'Não tem a certeza? Veja o "$videoTitle" para ajudar a responder';
|
||||
|
||||
static String quizProgress(int current, int total) => 'Quiz $current/$total';
|
||||
}
|
||||
26
lib/strings/settings_strings.dart
Normal file
26
lib/strings/settings_strings.dart
Normal file
@@ -0,0 +1,26 @@
|
||||
/// Texto do separador de Ajustes ([SettingsBody]).
|
||||
class SettingsStrings {
|
||||
const SettingsStrings._();
|
||||
|
||||
static const String deleteAccountData = 'Apagar dados da conta';
|
||||
static const String deleteAccountMessage =
|
||||
'Isto remove permanentemente a sua conta, perfil, crianças '
|
||||
'registadas e fotos — incluindo o login, permitindo criar uma '
|
||||
'nova conta com o mesmo e-mail depois. Esta ação não pode ser '
|
||||
'desfeita. Pretende continuar?';
|
||||
static const String delete = 'Apagar';
|
||||
static String errorDeletingAccount(int status) =>
|
||||
'Erro ao apagar conta (status $status)';
|
||||
static String errorDeleting(Object e) => 'Erro ao apagar: $e';
|
||||
|
||||
static const String account = 'Conta';
|
||||
static const String noName = 'Sem nome';
|
||||
static const String signOut = 'Sair';
|
||||
|
||||
static const String about = 'Sobre';
|
||||
static const String termsOfService = 'Termos de Serviço';
|
||||
static const String creatorsAndContributors = 'Criadores e colaboradores';
|
||||
static const String appVersion = 'Versão do app';
|
||||
|
||||
static const String dangerZone = 'Zona de risco';
|
||||
}
|
||||
6
lib/strings/splash_strings.dart
Normal file
6
lib/strings/splash_strings.dart
Normal file
@@ -0,0 +1,6 @@
|
||||
/// Texto do ecrã de boas-vindas ([HelloSplashScreen]).
|
||||
class SplashStrings {
|
||||
const SplashStrings._();
|
||||
|
||||
static const String greeting = 'Olá';
|
||||
}
|
||||
33
lib/strings/terms_strings.dart
Normal file
33
lib/strings/terms_strings.dart
Normal file
@@ -0,0 +1,33 @@
|
||||
/// Texto fixo dos Termos e Condições, partilhado entre o ecrã de bloqueio
|
||||
/// no cadastro ([TermsGateScreen]) e o ecrã informativo em Ajustes
|
||||
/// ([TermsScreen]).
|
||||
class TermsStrings {
|
||||
const TermsStrings._();
|
||||
|
||||
static const String headerTitle = 'Termos e Condições';
|
||||
static const String pageTitle = 'Termos de Serviço';
|
||||
static const String acceptAll = 'Aceitar tudo';
|
||||
static const String advance = 'Avançar';
|
||||
|
||||
static const List<String> paragraphs = [
|
||||
'© 2026, Francisca Salgado Ferreira Pacheco Silva. A aplicação, o método '
|
||||
'de avaliação, arquitetura e conteúdos são propriedade intelectual '
|
||||
'exclusiva da autora.',
|
||||
'A Check-Teeth Kids é uma aplicação desenvolvida com o propósito de '
|
||||
'promover a literacia em saúde oral infantil, através de conteúdos '
|
||||
'educativos e de um quiz de triagem digital, com especial enfoque na '
|
||||
'identificação precoce de sinais associados à má oclusão dentária.',
|
||||
'Com base nas respostas fornecidas, é apresentado um resultado que '
|
||||
'identifica sinais de má oclusão já instalados e fatores de risco '
|
||||
'associados, destinado a auxiliar o utilizador na decisão de '
|
||||
'procurar uma avaliação clínica especializada.',
|
||||
'Esta ferramenta não tem como objetivo realizar diagnósticos clínicos, '
|
||||
'nem substituir a avaliação por um profissional de saúde oral. '
|
||||
'Destina-se exclusivamente a uma triagem inicial e informativa, '
|
||||
'promovendo o encaminhamento atempado para um médico dentista '
|
||||
'especialista (Odontopediatra ou Ortodontista).',
|
||||
'Esta aplicação foi desenvolvida no âmbito de um projeto de dissertação '
|
||||
'de Mestrado, encontrando-se numa fase de desenvolvimento e ainda '
|
||||
'sem validação clínica formal concluída.',
|
||||
];
|
||||
}
|
||||
35
lib/strings/video_strings.dart
Normal file
35
lib/strings/video_strings.dart
Normal file
@@ -0,0 +1,35 @@
|
||||
/// Texto do ecrã de vídeos educativos ([VideoScreen]) e dos seus players.
|
||||
class VideoStrings {
|
||||
const VideoStrings._();
|
||||
|
||||
static const String pageTitle = 'Vídeos Educativos';
|
||||
static const String searchHint = 'Pesquisar vídeos...';
|
||||
static const String noVideosFound = 'Nenhum vídeo encontrado';
|
||||
static const String videoNotAvailable = 'Vídeo ainda não disponível';
|
||||
static String errorLoadingVideo(Object e) => 'Erro ao carregar vídeo: $e';
|
||||
static const String rewind10s = 'Retroceder 10s';
|
||||
static const String forward10s = 'Avançar 10s';
|
||||
static const String nextVideos = 'Próximos';
|
||||
static const String seeMore = 'Ver mais';
|
||||
static String episodeBadge(int id) => 'EP. $id';
|
||||
|
||||
static String episodeTitle(int id) => 'Episódio $id';
|
||||
|
||||
/// Descrições de cada episódio, na mesma ordem dos ids (índice 0 = ep. 1).
|
||||
static const List<String> episodeDescriptions = [
|
||||
'Qual a Influência do nariz entupido na má oclusão',
|
||||
'Qual a Influência das alergias sazionais na má oclusão',
|
||||
'Qual a Influência das Otites frequentes na má oclusão',
|
||||
'Qual a Influência das Amigdalites recorrentes na má oclusão',
|
||||
'Qual a Influência das Bronquiolites recorrentes na má oclusão',
|
||||
'Qual a Influência dos problemas respitatórios na má oclusão',
|
||||
'Qual a Influência das interrupções respiratórias na má oclusão',
|
||||
'Qual a Influência do ressonar na má oclusão',
|
||||
'Qual a Influência de acordar com saliva seca na boca ou na almofada '
|
||||
'na saúde oral',
|
||||
'Qual a Influência da respiração oral na má oclusão',
|
||||
'Qual a influência do uso exagerado da chupeta na má oclusão',
|
||||
'Qual a influência do uso exagerado da chupeta na má oclusão',
|
||||
'Qual a influência do hábito de chuchar o dedo na má oclusão',
|
||||
];
|
||||
}
|
||||
Reference in New Issue
Block a user