import 'package:shared_preferences/shared_preferences.dart'; import 'quiz_question_screen.dart' show QuizScore; /// Progresso de um quiz por terminar: em que pergunta ficou e a pontuação /// acumulada até aí. class QuizProgressData { const QuizProgressData({required this.questionIndex, required this.score}); /// Número (1-based) da pergunta onde retomar. final int questionIndex; final QuizScore score; } /// Guarda o progresso de um quiz abandonado a meio (ex.: "Voltar para /// homepage"), para oferecer "Continuar de onde parou" da próxima vez que o /// mesmo utilizador iniciar o quiz para a mesma criança. Só existe uma /// ranhura (não uma por criança): ao guardar progresso para uma criança /// diferente, substitui o anterior — como só se mostra a opção de continuar /// quando o [scopeId] guardado corresponde exatamente à criança escolhida, /// isto já cumpre "só se for a mesma criança" sem precisar de armazenamento /// por criança. class QuizProgressPrefs { static const String _kScopeKey = 'quiz_progress_scope'; static const String _kIndexKey = 'quiz_progress_index'; static const String _kSignsKey = 'quiz_progress_signs'; static const String _kFactorsKey = 'quiz_progress_factors'; static Future saveProgress({ required String scopeId, required int questionIndex, required QuizScore score, }) async { final prefs = await SharedPreferences.getInstance(); await prefs.setString(_kScopeKey, scopeId); await prefs.setInt(_kIndexKey, questionIndex); await prefs.setInt(_kSignsKey, score.signs); await prefs.setInt(_kFactorsKey, score.factors); } static Future getProgress(String scopeId) async { final prefs = await SharedPreferences.getInstance(); if (prefs.getString(_kScopeKey) != scopeId) return null; final index = prefs.getInt(_kIndexKey); final signs = prefs.getInt(_kSignsKey); final factors = prefs.getInt(_kFactorsKey); if (index == null || signs == null || factors == null) return null; return QuizProgressData( questionIndex: index, score: QuizScore(signs: signs, factors: factors), ); } static Future clearProgress() async { final prefs = await SharedPreferences.getInstance(); await prefs.remove(_kScopeKey); await prefs.remove(_kIndexKey); await prefs.remove(_kSignsKey); await prefs.remove(_kFactorsKey); } }