Atulização do quiz | Porcentagem na base de dados | Telas de Contrato com o usuario

This commit is contained in:
Carlos Correia
2026-07-13 22:28:01 +01:00
parent 824fdb8089
commit 4fcf3a475a
23 changed files with 2061 additions and 369 deletions

View File

@@ -6,7 +6,10 @@ import 'package:flutter/services.dart';
import 'package:lottie/lottie.dart';
import 'package:supabase_flutter/supabase_flutter.dart';
import 'auth_gate.dart' show pendingPrivacyUserId, pendingTermsUserId;
import 'main.dart' show supabase;
import 'privacy_gate_prefs.dart';
import 'terms_gate_prefs.dart';
import 'widgets/app_gradients.dart';
import 'widgets/entrance.dart';
import 'widgets/name_input_formatter.dart';
@@ -114,6 +117,19 @@ class _HomeScreenState extends State<HomeScreen> {
throw StateError('Usuário não encontrado após criar conta.');
}
// Antes de persistir o perfil (o que já faz o AuthGate considerar a
// sessão válida), marca esta conta como pendente de consentimento
// de privacidade e de aceitação dos Termos — o AuthGate mostra
// primeiro o PrivacyGateScreen e, só depois de aceite, o
// TermsGateScreen, em vez do LoggedHome, enquanto estes uids
// estiverem marcados. Grava também em disco (não só em memória)
// para os gates sobreviverem caso o processo seja morto antes de o
// utilizador responder.
pendingPrivacyUserId.value = user.id;
unawaited(PrivacyGatePrefs.setPendingUid(user.id));
pendingTermsUserId.value = user.id;
unawaited(TermsGatePrefs.setPendingUid(user.id));
// Precisa de terminar antes de navegar: o AuthGate só mostra a app
// depois de confirmar que existe um perfil na base de dados.
await _persistRegistrationData(uid: user.id, name: name, email: email);