import 'dart:math'; import 'package:flutter/material.dart'; import 'quiz_question_screen.dart'; import 'quiz_result.dart'; class QuizRandomScreen extends StatefulWidget { const QuizRandomScreen({super.key, this.currentScore = 0, this.scopeId}); final int currentScore; final String? scopeId; @override State createState() => _QuizRandomScreenState(); } class _QuizRandomScreenState extends State { final List _allQuestions = [ QuizQuestion( id: 1, title: 'Quiz 1/15', question: 'Qual é o tempo ideal para escovar os dentes?', answers: const [ QuizAnswer( title: 'Cerca de 2 minutos', description: 'O recomendado é escovar por aproximadamente 2 minutos, cobrindo todas as superfícies dos dentes e a linha da gengiva sem pressa.', weight: 2, ), QuizAnswer( title: 'Só 30 segundos, se fizer rápido', description: 'Muito pouco tempo costuma deixar placa bacteriana para trás, principalmente nos dentes de trás e perto da gengiva.', weight: 5, ), QuizAnswer( title: '5 minutos com força para "limpar bem"', description: 'Tempo demais e força excessiva podem irritar a gengiva e desgastar o esmalte. Prefira movimentos suaves e tempo adequado.', weight: 3, ), ], ), QuizQuestion( id: 2, title: 'Quiz 2/15', question: 'Quando devo trocar a escova de dentes?', answers: const [ QuizAnswer( title: 'A cada 3 meses (ou antes se estragar)', description: 'O ideal é trocar a cada ~3 meses. Se as cerdas abrirem antes, troque antes. Cerdas abertas limpam pior.', weight: 2, ), QuizAnswer( title: 'Só quando a escova "quebrar"', description: 'Esperar demais reduz a eficiência da escovação e pode acumular microrganismos na escova.', weight: 5, ), QuizAnswer( title: 'Todo mês, obrigatoriamente', description: 'Não é regra fixa. Um mês pode ser cedo demais se a escova estiver em bom estado. O principal é o estado das cerdas.', weight: 3, ), ], ), QuizQuestion( id: 3, title: 'Quiz 3/15', question: 'Qual a quantidade ideal de pasta de dente para crianças?', answers: const [ QuizAnswer( title: 'Um grão de arroz (pequenos) / ervilha (maiores)', description: 'Para crianças pequenas, um "grão de arroz" já basta. Conforme cresce, pode ser do tamanho de uma ervilha. Isso ajuda a evitar excesso de flúor ingerido.', weight: 2, ), QuizAnswer( title: 'Cobrir toda a escova com pasta', description: 'Muito produto não significa melhor limpeza. Em crianças, aumenta o risco de engolir pasta em excesso.', weight: 5, ), QuizAnswer( title: 'Nenhuma pasta, só água', description: 'A pasta com flúor (na quantidade correta) ajuda a prevenir cáries. Em geral, água sozinha não oferece a mesma proteção.', weight: 3, ), ], ), QuizQuestion( id: 4, title: 'Quiz 4/15', question: 'Qual é o melhor horário para usar fio dental?', answers: const [ QuizAnswer( title: 'Uma vez ao dia, com calma (geralmente à noite)', description: 'O importante é a frequência diária. À noite costuma ser mais fácil, pois remove restos e placa antes de dormir.', weight: 2, ), QuizAnswer( title: 'Só quando algo fica preso', description: 'O fio dental não serve apenas para tirar restos visíveis; ele remove placa bacteriana entre os dentes onde a escova não alcança.', weight: 5, ), QuizAnswer( title: 'Depois de toda refeição (obrigatório)', description: 'Pode ser útil em alguns casos, mas não é obrigatório para todos. O essencial é fazer bem feito ao menos 1x ao dia.', weight: 3, ), ], ), QuizQuestion( id: 5, title: 'Quiz 5/15', question: 'O que ajuda mais a prevenir cáries no dia a dia?', answers: const [ QuizAnswer( title: 'Escovar + flúor + reduzir açúcar frequente', description: 'A prevenção é um conjunto: boa higiene com flúor e menos "beliscos" açucarados ao longo do dia.', weight: 2, ), QuizAnswer( title: 'Só enxaguante bucal', description: 'Enxaguante pode ajudar em alguns casos, mas não substitui escovação e fio dental.', weight: 3, ), QuizAnswer( title: 'Evitar completamente dentista', description: 'Consultas regulares são importantes para prevenção e orientação. O dentista também identifica problemas bem no começo.', weight: 5, ), ], ), QuizQuestion( id: 6, title: 'Quiz 6/15', question: 'Qual tipo de escova é mais recomendada para crianças?', answers: const [ QuizAnswer( title: 'Escova macia com cabeça pequena', description: 'Escovas macias protegem a gengiva sensível das crianças e a cabeça pequena alcança melhor todos os dentes.', weight: 2, ), QuizAnswer( title: 'Escova dura para limpar melhor', description: 'Escovas duras podem machucar a gengiva e desgastar o esmalte dos dentes das crianças.', weight: 5, ), QuizAnswer( title: 'Escova elétrica sempre é melhor', description: 'Escova elétrica pode ajudar, mas não é essencial. O mais importante é a técnica e frequência.', weight: 3, ), ], ), QuizQuestion( id: 7, title: 'Quiz 7/15', question: 'Qual alimento é mais prejudicial para os dentes?', answers: const [ QuizAnswer( title: 'Balas e chicletes pegajosos', description: 'Alimentos pegajosos ficam presos nos dentes por mais tempo, aumentando o risco de cáries.', weight: 2, ), QuizAnswer( title: 'Maçã e cenoura', description: 'Frutas e vegetais crus ajudam a limpar os dentes naturalmente e são saudáveis.', weight: 5, ), QuizAnswer( title: 'Água e leite', description: 'Água ajuda a limpar e leite tem cálcio. São opções saudáveis para os dentes.', weight: 3, ), ], ), QuizQuestion( id: 8, title: 'Quiz 8/15', question: 'Quando deve ser a primeira visita ao dentista?', answers: const [ QuizAnswer( title: 'Por volta dos 1 ano de idade', description: 'A primeira visita deve ser assim que o primeiro dentinho nascer ou até o primeiro aniversário.', weight: 2, ), QuizAnswer( title: 'Só quando tiver todos os dentes', description: 'Esperar demais pode permitir que problemas comecem sem detecção precoce.', weight: 5, ), QuizAnswer( title: 'Apenas se sentir dor', description: 'Dor geralmente indica que o problema já está avançado. Prevenção é melhor que tratamento.', weight: 5, ), ], ), QuizQuestion( id: 9, title: 'Quiz 9/15', question: 'Até que idade é aceitável usar chupeta?', answers: const [ QuizAnswer( title: 'Até 2-3 anos no máximo', description: 'Após 2-3 anos, chupeta pode causar problemas na dentição e no desenvolvimento da fala.', weight: 2, ), QuizAnswer( title: 'Até 6-7 anos', description: 'Essa idade já é muito tarde e pode causar problemas sérios na arcada dentária.', weight: 5, ), QuizAnswer( title: 'Não tem problema usar sempre', description: 'Uso prolongado pode causar má oclusão, problemas na fala e alterações faciais.', weight: 5, ), ], ), QuizQuestion( id: 10, title: 'Quiz 10/15', question: 'O flúor na água de abastecimento ajuda?', answers: const [ QuizAnswer( title: 'Sim, reduz cáries em até 60%', description: 'Flúor na água é uma das medidas de saúde pública mais eficazes na prevenção de cáries.', weight: 2, ), QuizAnswer( title: 'Não faz diferença nenhuma', description: 'Estudos comprovam que flúor na água reduz significativamente a incidência de cáries.', weight: 5, ), QuizAnswer( title: 'É perigoso e causa problemas', description: 'Nas concentrações corretas, flúor é seguro. O problema é o excesso, não o uso adequado.', weight: 4, ), ], ), QuizQuestion( id: 11, title: 'Quiz 11/15', question: 'Por que a escovação noturna é tão importante?', answers: const [ QuizAnswer( title: 'Menos saliva durante o sono', description: 'Durante a noite produzimos menos saliva, que protege os dentes. Escovação remove placa antes desse período vulnerável.', weight: 2, ), QuizAnswer( title: 'É igual aos outros horários', description: 'A noite é especial porque a produção de saliva diminui, aumentando o risco de cáries.', weight: 4, ), QuizAnswer( title: 'Só por tradição', description: 'Tem fundamento científico. A noite é o período mais crítico para formação de cáries.', weight: 5, ), ], ), QuizQuestion( id: 12, title: 'Quiz 12/15', question: 'Qual bebida é mais ácida para os dentes?', answers: const [ QuizAnswer( title: 'Refrigerantes e sucos industrializados', description: 'Refrigerantes e sucos artificiais têm pH muito baixo, corroem o esmalte e causam erosão dental.', weight: 2, ), QuizAnswer( title: 'Água e leite', description: 'Água tem pH neutro e leite é levemente ácido mas protege os dentes com cálcio.', weight: 5, ), QuizAnswer( title: 'Chá sem açúcar', description: 'Chá pode manchar mas é muito menos ácido que refrigerantes e sucos artificiais.', weight: 3, ), ], ), QuizQuestion( id: 13, title: 'Quiz 13/15', question: 'É importante cuidar dos dentes de leite?', answers: const [ QuizAnswer( title: 'Sim, são fundamentais para o desenvolvimento', description: 'Dentes de leite mantêm espaço para os permanentes, auxiliam na fala e mastigação.', weight: 2, ), QuizAnswer( title: 'Não, vão cair de qualquer jeito', description: 'Dentes de leite doentes podem afetar os permanentes e causar problemas no desenvolvimento.', weight: 5, ), QuizAnswer( title: 'Só se doerem', description: 'Mesmo sem dor, problemas nos dentes de leite podem ter consequências sérias futuras.', weight: 4, ), ], ), QuizQuestion( id: 14, title: 'Quiz 14/15', question: 'Qual é a técnica correta de escovação?', answers: const [ QuizAnswer( title: 'Movimentos circulares suaves', description: 'Movimentos circulares ou vibratórios suaves limpam sem machucar a gengiva e removem a placa eficientemente.', weight: 2, ), QuizAnswer( title: 'Força de um lado para o outro', description: 'Movimentos horizontais fortes podem machucar a gengiva e causar recessão gengival.', weight: 5, ), QuizAnswer( title: 'Só na frente dos dentes', description: 'Precisa escovar todas as faces: frente, atrás e superfície de mastigação.', weight: 4, ), ], ), QuizQuestion( id: 15, title: 'Quiz 15/15', question: 'Para que servem os selantes dentários?', answers: const [ QuizAnswer( title: 'Proteger sulcos dos dentes contra cáries', description: 'Selantes são uma resina que preenche sulcos e fissuras dos dentes, protegendo contra cáries.', weight: 2, ), QuizAnswer( title: 'Clarear os dentes', description: 'Selantes não têm função estética de clareamento, apenas protetiva contra cáries.', weight: 5, ), QuizAnswer( title: 'Substituir a escovação', description: 'Selantes complementam a higiene, não substituem a escovação e o fio dental.', weight: 4, ), ], ), ]; late List _shuffledQuestions; int _currentQuestionIndex = 0; int _currentScore = 0; final Random _random = Random(); @override void initState() { super.initState(); _currentScore = widget.currentScore; _shuffledQuestions = List.from(_allQuestions)..shuffle(_random); } void _nextQuestion(int scoreToAdd) { setState(() { _currentScore += scoreToAdd; _currentQuestionIndex++; }); if (_currentQuestionIndex >= _shuffledQuestions.length) { // Quiz finished Navigator.of(context).pushReplacement( MaterialPageRoute( builder: (_) => QuizResultScreen( finalScore: _currentScore, maxScore: 75, // 15 questions * 5 max points scopeId: widget.scopeId, ), ), ); } } @override Widget build(BuildContext context) { if (_currentQuestionIndex >= _shuffledQuestions.length) { return const Scaffold(body: Center(child: CircularProgressIndicator())); } final currentQuestion = _shuffledQuestions[_currentQuestionIndex]; final isLastQuestion = _currentQuestionIndex == _shuffledQuestions.length - 1; return QuizQuestionScreen( title: currentQuestion.title, question: currentQuestion.question, answers: currentQuestion.answers, currentScore: _currentScore, nextRoute: (context, nextScore) { _nextQuestion(nextScore - _currentScore); return MaterialPageRoute( builder: (_) => const SizedBox.shrink(), ); }, isFinal: isLastQuestion, showBackButton: _currentQuestionIndex > 0, onFinished: isLastQuestion ? () { Navigator.of(context).pushReplacement( MaterialPageRoute( builder: (_) => QuizResultScreen( finalScore: _currentScore, maxScore: 75, scopeId: widget.scopeId, ), ), ); } : null, ); } } class QuizQuestion { final int id; final String title; final String question; final List answers; QuizQuestion({ required this.id, required this.title, required this.question, required this.answers, }); }