CKT 1.0.1
This commit is contained in:
@@ -25,24 +25,24 @@ class _CreditSection {
|
||||
}
|
||||
|
||||
const List<_CreditSection> _kCreditSections = [
|
||||
_CreditSection('Desenvolvimento', [
|
||||
_CreditSection('Criadora original', [
|
||||
_CreditPerson('Francisca Salgado Ferreira Pacheco Silva', 'Criadora original'),
|
||||
]),
|
||||
_CreditSection('Desenvolvimento informático', [
|
||||
_CreditPerson('Carlos Correia', 'Desenvolvedor'),
|
||||
_CreditPerson('Fabio Ceia', 'Desenvolvedor'),
|
||||
_CreditPerson('Fábio Ceia', 'Desenvolvedor'),
|
||||
_CreditPerson('Ruben Grandra', 'Desenvolvedor'),
|
||||
_CreditPerson('Dinis Maria', 'Desenvolvedor'),
|
||||
]),
|
||||
_CreditSection('Idealização', [
|
||||
_CreditPerson('Francisca Pacheco Silva', 'Idealizadora/Formanda'),
|
||||
]),
|
||||
_CreditSection('Orientação', [
|
||||
_CreditPerson(
|
||||
'João Carlos Rodrigues L. Nunes Miranda',
|
||||
'Professor supervisor',
|
||||
),
|
||||
_CreditSection('Orientadores', [
|
||||
_CreditPerson('Augusta Pureza Alves Silveira', 'Orientador(a)'),
|
||||
_CreditPerson('Cristina Lopes Cardoso Silva', 'Orientador(a)'),
|
||||
_CreditPerson('João Carlos Rodrigues L. Miranda', 'Orientador(a)'),
|
||||
]),
|
||||
_CreditSection('Instituição colaboradora', [
|
||||
_CreditPerson('Universidade Fernando Pessoa', ''),
|
||||
_CreditPerson(
|
||||
'Escola Profissional da Vila do Conde',
|
||||
'Escola Profissional de Vila do Conde',
|
||||
'',
|
||||
logoPath: 'assets/logo2.png',
|
||||
),
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -9,10 +9,11 @@ import '../widgets/liquid_waves_background.dart';
|
||||
import '../widgets/tap_bounce.dart';
|
||||
import '../widgets/terms_content.dart';
|
||||
|
||||
/// Ecrã de bloqueio mostrado logo após o cadastro (primeira vez), antes de
|
||||
/// entrar na app. Só avança para a Home se o utilizador aceitar os Termos;
|
||||
/// 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), antes do
|
||||
/// [PrivacyGateScreen] e antes de entrar na app. Só avança para o próximo
|
||||
/// passo se o utilizador aceitar os Termos; 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 TermsGateScreen extends StatefulWidget {
|
||||
const TermsGateScreen({
|
||||
super.key,
|
||||
|
||||
Reference in New Issue
Block a user