Files
CheckTheethKids/lib/quiz/quiz_prefs.dart
2026-07-14 18:23:03 +01:00

95 lines
2.9 KiB
Dart

import 'package:shared_preferences/shared_preferences.dart';
/// Resultado do quiz, sempre com os dois indicadores juntos — nunca faz
/// sentido guardar/ler um sem o outro.
class QuizResultData {
const QuizResultData({
required this.signs,
required this.signsMax,
required this.factors,
required this.factorsMax,
});
final int signs;
final int signsMax;
final int factors;
final int factorsMax;
}
class QuizPrefs {
static const String _kSeenQuizKey = 'seen_oral_quiz_v1';
static const String _kSignsKey = 'last_oral_quiz_signs_v2';
static const String _kSignsMaxKey = 'last_oral_quiz_signs_max_v2';
static const String _kFactorsKey = 'last_oral_quiz_factors_v2';
static const String _kFactorsMaxKey = 'last_oral_quiz_factors_max_v2';
static String _scopeKey(String base, String? scopeId) {
final id = (scopeId ?? '').trim();
if (id.isEmpty) return base;
return '${base}_$id';
}
static Future<bool> hasSeenQuiz() async {
final prefs = await SharedPreferences.getInstance();
return prefs.getBool(_kSeenQuizKey) ?? false;
}
static Future<void> markQuizSeen() async {
final prefs = await SharedPreferences.getInstance();
await prefs.setBool(_kSeenQuizKey, true);
}
static Future<void> saveLastResult(QuizResultData result) async {
await saveLastResultForScope(scopeId: null, result: result);
}
static Future<void> saveLastResultForUser({
required String userId,
required QuizResultData result,
}) async {
await saveLastResultForScope(scopeId: userId, result: result);
}
static Future<void> saveLastResultForScope({
required String? scopeId,
required QuizResultData result,
}) async {
final prefs = await SharedPreferences.getInstance();
await prefs.setInt(_scopeKey(_kSignsKey, scopeId), result.signs);
await prefs.setInt(_scopeKey(_kSignsMaxKey, scopeId), result.signsMax);
await prefs.setInt(_scopeKey(_kFactorsKey, scopeId), result.factors);
await prefs.setInt(
_scopeKey(_kFactorsMaxKey, scopeId),
result.factorsMax,
);
}
static Future<QuizResultData?> getLastResult() =>
getLastResultForScope(null);
static Future<QuizResultData?> getLastResultForUser(String userId) =>
getLastResultForScope(userId);
static Future<QuizResultData?> getLastResultForScope(
String? scopeId,
) async {
final prefs = await SharedPreferences.getInstance();
final signs = prefs.getInt(_scopeKey(_kSignsKey, scopeId));
final signsMax = prefs.getInt(_scopeKey(_kSignsMaxKey, scopeId));
final factors = prefs.getInt(_scopeKey(_kFactorsKey, scopeId));
final factorsMax = prefs.getInt(_scopeKey(_kFactorsMaxKey, scopeId));
if (signs == null ||
signsMax == null ||
factors == null ||
factorsMax == null) {
return null;
}
return QuizResultData(
signs: signs,
signsMax: signsMax,
factors: factors,
factorsMax: factorsMax,
);
}
}