CKT String|Colors

This commit is contained in:
Carlos Correia
2026-07-15 19:13:15 +01:00
parent 3214a07779
commit a8af2c6845
35 changed files with 1390 additions and 688 deletions

View 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';
}

View 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';
}

View 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)';
}

View 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.';
}

View 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';
}

View 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.';
}

View 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.';
}

View 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';
}

View 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';
}

View 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';
}

View File

@@ -0,0 +1,6 @@
/// Texto do ecrã de boas-vindas ([HelloSplashScreen]).
class SplashStrings {
const SplashStrings._();
static const String greeting = 'Olá';
}

View 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.',
];
}

View 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',
];
}