CKT 1.0.1

This commit is contained in:
Carlos Correia
2026-07-15 02:40:22 +01:00
parent fb39e1f722
commit 9c21887fc7
49 changed files with 255 additions and 288 deletions

View File

@@ -10,11 +10,12 @@ import '../widgets/liquid_waves_background.dart';
import '../widgets/tap_bounce.dart';
import '../widgets/privacy_content.dart';
/// Ecrã de bloqueio mostrado logo após o cadastro (primeira vez), antes do
/// [TermsGateScreen] e antes de entrar na app. Só avança para o próximo
/// passo se o utilizador consentir os três itens de privacidade; se
/// recusar (botão ou seta de voltar), a conta acabada de criar é removida
/// (perfil apagado + sessão terminada) e volta-se ao login.
/// Ecrã de bloqueio mostrado logo após o cadastro (primeira vez), depois
/// de aceites os Termos ([TermsGateScreen]) e antes de entrar na app. Só
/// avança para a Home se o utilizador consentir os itens obrigatórios de
/// privacidade (o terceiro item é opcional); se recusar (botão ou seta de
/// voltar), a conta acabada de criar é removida (perfil apagado + sessão
/// terminada) e volta-se ao login.
class PrivacyGateScreen extends StatefulWidget {
const PrivacyGateScreen({
super.key,
@@ -33,7 +34,9 @@ class _PrivacyGateScreenState extends State<PrivacyGateScreen> {
final Set<String> _accepted = {};
bool _declining = false;
bool get _allAccepted => _accepted.length == kPrivacyConsentItems.length;
bool get _allAccepted => kPrivacyConsentItems
.where((item) => item.required)
.every((item) => _accepted.contains(item.id));
void _toggle(String id, bool value) {
setState(() {
@@ -242,8 +245,23 @@ class _PrivacyConsentRow extends StatelessWidget {
),
const SizedBox(width: 12),
Expanded(
child: Text(
item.text,
child: Text.rich(
TextSpan(
children: [
TextSpan(
text: item.required
? '(Obrigatório) '
: '(Opcional) ',
style: TextStyle(
fontWeight: FontWeight.w900,
color: item.required
? kPrivacyTeal
: Colors.black.withValues(alpha: 0.45),
),
),
TextSpan(text: item.text),
],
),
style: TextStyle(
fontSize: 13,
fontWeight: FontWeight.w700,