Telas de login e dashboard de estudante feito

This commit is contained in:
2026-05-07 21:10:30 +01:00
parent 547d5f5484
commit c1d1a0fce1
44 changed files with 6740 additions and 183 deletions

116
lib/l10n/app_en.arb Normal file
View File

@@ -0,0 +1,116 @@
{
"@@locale": "en",
"@@last_modified": "2024-05-06T21:26:00.000Z",
"appTitle": "AI Study Assistant",
"@appTitle": {
"description": "Title of the application"
},
"schoolName": "Escola Profissional de Vila do Conde",
"@schoolName": {
"description": "Name of the school"
},
"welcomeBack": "Welcome Back",
"@welcomeBack": {
"description": "Welcome back message on login screen"
},
"signInToContinue": "Sign in to continue learning",
"@signInToContinue": {
"description": "Subtitle on login screen"
},
"email": "Email",
"@email": {
"description": "Email field label"
},
"password": "Password",
"@password": {
"description": "Password field label"
},
"enterYourEmail": "Enter your email",
"@enterYourEmail": {
"description": "Email field hint"
},
"enterYourPassword": "Enter your password",
"@enterYourPassword": {
"description": "Password field hint"
},
"signIn": "Sign In",
"@signIn": {
"description": "Sign in button text"
},
"dontHaveAccount": "Don't have an account? ",
"@dontHaveAccount": {
"description": "Sign up prompt text"
},
"signUp": "Sign Up",
"@signUp": {
"description": "Sign up link text"
},
"createAccount": "Create Account",
"@createAccount": {
"description": "Create account title"
},
"joinOurCommunity": "Join our learning community",
"@joinOurCommunity": {
"description": "Sign up subtitle"
},
"confirmPassword": "Confirm Password",
"@confirmPassword": {
"description": "Confirm password field label"
},
"confirmYourPassword": "Confirm your password",
"@confirmYourPassword": {
"description": "Confirm password field hint"
},
"signUpButton": "Sign Up",
"@signUpButton": {
"description": "Sign up button text"
},
"alreadyHaveAccount": "Already have an account? ",
"@alreadyHaveAccount": {
"description": "Login prompt text"
},
"login": "Login",
"@login": {
"description": "Login link text"
},
"studentDashboard": "Student Dashboard",
"@studentDashboard": {
"description": "Student dashboard title"
},
"teacherDashboard": "Teacher Dashboard",
"@teacherDashboard": {
"description": "Teacher dashboard title"
},
"aiTutor": "AI Tutor",
"@aiTutor": {
"description": "AI Tutor title"
},
"quizzes": "Quizzes",
"@quizzes": {
"description": "Quizzes title"
},
"profile": "Profile",
"@profile": {
"description": "Profile title"
},
"pageNotFound": "Page Not Found",
"@pageNotFound": {
"description": "Page not found title"
},
"loading": "Loading...",
"@loading": {
"description": "Loading message"
},
"error": {
"pleaseEnterEmail": "Please enter your email",
"pleaseEnterValidEmail": "Please enter a valid email",
"pleaseEnterPassword": "Please enter your password",
"passwordTooShort": "Password must be at least 6 characters",
"passwordsDoNotMatch": "Passwords do not match",
"loginFailed": "Login failed",
"signupFailed": "Sign up failed"
},
"@@error": {
"description": "Error messages"
}
}

View File

@@ -0,0 +1,82 @@
import 'package:flutter/material.dart';
class AppLocalizations {
final Locale locale;
AppLocalizations(this.locale);
static AppLocalizations? of(BuildContext context) {
return Localizations.of<AppLocalizations>(context, AppLocalizations);
}
static const LocalizationsDelegate<AppLocalizations> delegate =
_AppLocalizationsDelegate();
static const List<Locale> supportedLocales = [
Locale('pt', 'PT'), // Portuguese (Portugal)
Locale('en', 'US'), // English (United States)
];
static const Locale fallbackLocale = Locale('pt', 'PT');
// App
String get appTitle => 'Assistente de Estudo IA';
String get schoolName => 'Escola Profissional de Vila do Conde';
// Login
String get welcomeBack => 'Bem-vindo de volta';
String get signInToContinue => 'Inicie sessão para continuar a aprender';
String get email => 'Email';
String get password => 'Palavra-passe';
String get enterYourEmail => 'Introduza o seu email';
String get enterYourPassword => 'Introduza a sua palavra-passe';
String get signIn => 'Iniciar Sessão';
String get dontHaveAccount => 'Não tem uma conta? ';
String get signUp => 'Registar-se';
// Sign Up
String get createAccount => 'Criar Conta';
String get joinOurCommunity => 'Junte-se à nossa comunidade de aprendizagem';
String get confirmPassword => 'Confirmar palavra-passe';
String get confirmYourPassword => 'Confirme a sua palavra-passe';
String get signUpButton => 'Registar';
String get alreadyHaveAccount => 'Já tem uma conta? ';
String get login => 'Iniciar Sessão';
// Dashboard
String get studentDashboard => 'Painel do Aluno';
String get teacherDashboard => 'Painel do Professor';
String get aiTutor => 'Tutor IA';
String get quizzes => 'Questionários';
String get profile => 'Perfil';
// General
String get pageNotFound => 'Página Não Encontrada';
String get loading => 'A carregar...';
// Error messages
String get pleaseEnterEmail => 'Por favor, introduza o seu email';
String get pleaseEnterValidEmail => 'Por favor, introduza um email válido';
String get pleaseEnterPassword => 'Por favor, introduza a sua palavra-passe';
String get passwordTooShort => 'A palavra-passe deve ter pelo menos 6 caracteres';
String get passwordsDoNotMatch => 'As palavras-passe não coincidem';
String get loginFailed => 'Falha no início de sessão';
String get signupFailed => 'Falha no registo';
}
class _AppLocalizationsDelegate extends LocalizationsDelegate<AppLocalizations> {
const _AppLocalizationsDelegate();
@override
bool isSupported(Locale locale) {
return ['pt', 'en'].contains(locale.languageCode);
}
@override
Future<AppLocalizations> load(Locale locale) async {
return AppLocalizations(locale);
}
@override
bool shouldReload(LocalizationsDelegate<AppLocalizations> old) => false;
}

116
lib/l10n/app_pt.arb Normal file
View File

@@ -0,0 +1,116 @@
{
"@@locale": "pt",
"@@last_modified": "2024-05-06T21:26:00.000Z",
"appTitle": "Assistente de Estudo IA",
"@appTitle": {
"description": "Title of the application"
},
"schoolName": "Escola Profissional de Vila do Conde",
"@schoolName": {
"description": "Name of the school"
},
"welcomeBack": "Bem-vindo de volta",
"@welcomeBack": {
"description": "Welcome back message on login screen"
},
"signInToContinue": "Inicie sessão para continuar a aprender",
"@signInToContinue": {
"description": "Subtitle on login screen"
},
"email": "Email",
"@email": {
"description": "Email field label"
},
"password": "Palavra-passe",
"@password": {
"description": "Password field label"
},
"enterYourEmail": "Introduza o seu email",
"@enterYourEmail": {
"description": "Email field hint"
},
"enterYourPassword": "Introduza a sua palavra-passe",
"@enterYourPassword": {
"description": "Password field hint"
},
"signIn": "Iniciar Sessão",
"@signIn": {
"description": "Sign in button text"
},
"dontHaveAccount": "Não tem uma conta? ",
"@dontHaveAccount": {
"description": "Sign up prompt text"
},
"signUp": "Registar-se",
"@signUp": {
"description": "Sign up link text"
},
"createAccount": "Criar Conta",
"@createAccount": {
"description": "Create account title"
},
"joinOurCommunity": "Junte-se à nossa comunidade de aprendizagem",
"@joinOurCommunity": {
"description": "Sign up subtitle"
},
"confirmPassword": "Confirmar palavra-passe",
"@confirmPassword": {
"description": "Confirm password field label"
},
"confirmYourPassword": "Confirme a sua palavra-passe",
"@confirmYourPassword": {
"description": "Confirm password field hint"
},
"signUpButton": "Registar",
"@signUpButton": {
"description": "Sign up button text"
},
"alreadyHaveAccount": "Já tem uma conta? ",
"@alreadyHaveAccount": {
"description": "Login prompt text"
},
"login": "Iniciar Sessão",
"@login": {
"description": "Login link text"
},
"studentDashboard": "Painel do Aluno",
"@studentDashboard": {
"description": "Student dashboard title"
},
"teacherDashboard": "Painel do Professor",
"@teacherDashboard": {
"description": "Teacher dashboard title"
},
"aiTutor": "Tutor IA",
"@aiTutor": {
"description": "AI Tutor title"
},
"quizzes": "Questionários",
"@quizzes": {
"description": "Quizzes title"
},
"profile": "Perfil",
"@profile": {
"description": "Profile title"
},
"pageNotFound": "Página Não Encontrada",
"@pageNotFound": {
"description": "Page not found title"
},
"loading": "A carregar...",
"@loading": {
"description": "Loading message"
},
"error": {
"pleaseEnterEmail": "Por favor, introduza o seu email",
"pleaseEnterValidEmail": "Por favor, introduza um email válido",
"pleaseEnterPassword": "Por favor, introduza a sua palavra-passe",
"passwordTooShort": "A palavra-passe deve ter pelo menos 6 caracteres",
"passwordsDoNotMatch": "As palavras-passe não coincidem",
"loginFailed": "Falha no início de sessão",
"signupFailed": "Falha no registo"
},
"@@error": {
"description": "Error messages"
}
}