Dark mode em upload pdf

This commit is contained in:
2026-05-18 23:05:33 +01:00
parent 7f12f3eb1f
commit 8043ee42fe
19 changed files with 77 additions and 73 deletions

View File

@@ -1,4 +1,4 @@
# teachit # Learn It
A new Flutter project. A new Flutter project.

View File

@@ -1,6 +1,6 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"> <manifest xmlns:android="http://schemas.android.com/apk/res/android">
<application <application
android:label="teachit" android:label="Learn It"
android:name="${applicationName}" android:name="${applicationName}"
android:icon="@mipmap/launcher_icon"> android:icon="@mipmap/launcher_icon">
<activity <activity

View File

@@ -13,7 +13,7 @@ This document outlines the complete Flutter project structure for the AI Study A
## 📁 ROOT DIRECTORY STRUCTURE ## 📁 ROOT DIRECTORY STRUCTURE
``` ```
teachit/ learn_it/
├── android/ # Android-specific files ├── android/ # Android-specific files
├── ios/ # iOS-specific files ├── ios/ # iOS-specific files
├── web/ # Web-specific files ├── web/ # Web-specific files
@@ -381,7 +381,7 @@ lib/
### pubspec.yaml ### pubspec.yaml
```yaml ```yaml
name: teachit name: learn_it
description: AI Study Assistant - Educational Intelligence Platform description: AI Study Assistant - Educational Intelligence Platform
version: 1.0.0+1 version: 1.0.0+1
@@ -551,7 +551,7 @@ linter:
**android/app/build.gradle** **android/app/build.gradle**
```gradle ```gradle
android { android {
namespace 'com.example.teachit' namespace 'com.example.learnit'
compileSdkVersion flutter.compileSdkVersion compileSdkVersion flutter.compileSdkVersion
compileOptions { compileOptions {
@@ -564,7 +564,7 @@ android {
} }
defaultConfig { defaultConfig {
applicationId "com.example.teachit" applicationId "com.example.learnit"
minSdkVersion 21 minSdkVersion 21
targetSdkVersion flutter.targetSdkVersion targetSdkVersion flutter.targetSdkVersion
versionCode flutterVersionCode.toInteger() versionCode flutterVersionCode.toInteger()
@@ -596,9 +596,9 @@ dependencies {
**ios/Runner/Info.plist** **ios/Runner/Info.plist**
```xml ```xml
<key>CFBundleDisplayName</key> <key>CFBundleDisplayName</key>
<string>TeachIt</string> <string>Learn It</string>
<key>CFBundleIdentifier</key> <key>CFBundleIdentifier</key>
<string>com.example.teachit</string> <string>com.example.learnit</string>
<key>CFBundleVersion</key> <key>CFBundleVersion</key>
<string>1.0</string> <string>1.0</string>
<key>UISupportedInterfaceOrientations</key> <key>UISupportedInterfaceOrientations</key>
@@ -1063,7 +1063,7 @@ class Environment {
static const bool isProductionMode = kReleaseMode; static const bool isProductionMode = kReleaseMode;
static const String apiBaseUrl = isDebugMode static const String apiBaseUrl = isDebugMode
? 'http://localhost:8080' ? 'http://localhost:8080'
: 'https://api.teachit.app'; : 'https://api.learnit.app';
} }
``` ```

View File

@@ -12,7 +12,7 @@
**Dependencies**: None **Dependencies**: None
#### Subtasks: #### Subtasks:
- [ ] Create new Flutter project: `flutter create teachit` - [ ] Create new Flutter project: `flutter create learn_it`
- [ ] Configure Flutter SDK version (3.41.9 or latest stable) - [ ] Configure Flutter SDK version (3.41.9 or latest stable)
- [ ] Set up version control (Git repository) - [ ] Set up version control (Git repository)
- [ ] Create initial project structure - [ ] Create initial project structure
@@ -62,8 +62,8 @@ dev_dependencies:
#### Implementation Details: #### Implementation Details:
```bash ```bash
# Create project # Create project
flutter create teachit flutter create learn_it
cd teachit cd learn_it
# Initialize git # Initialize git
git init git init

View File

@@ -275,7 +275,7 @@ export class FieldEncryption {
async decryptField(encryptedData: EncryptedData, key: string): Promise<string> { async decryptField(encryptedData: EncryptedData, key: string): Promise<string> {
const decipher = crypto.createDecipher(this.algorithm, key); const decipher = crypto.createDecipher(this.algorithm, key);
decipher.setAAD(Buffer.from('teachit-field', 'utf8')); decipher.setAAD(Buffer.from('learnit-field', 'utf8'));
decipher.setAuthTag(Buffer.from(encryptedData.tag, 'hex')); decipher.setAuthTag(Buffer.from(encryptedData.tag, 'hex'));
let decrypted = decipher.update(encryptedData.data, 'hex', 'utf8'); let decrypted = decipher.update(encryptedData.data, 'hex', 'utf8');
@@ -409,7 +409,7 @@ export const securityHeaders = {
"style-src 'self' 'unsafe-inline'", "style-src 'self' 'unsafe-inline'",
"img-src 'self' data: https:", "img-src 'self' data: https:",
"font-src 'self'", "font-src 'self'",
"connect-src 'self' https://api.teachit.app", "connect-src 'self' https://api.learnit.app",
"frame-ancestors 'none'", "frame-ancestors 'none'",
"base-uri 'self'", "base-uri 'self'",
"form-action 'self'", "form-action 'self'",
@@ -1218,7 +1218,7 @@ export class GDPRRights {
return { return {
format: 'JSON', format: 'JSON',
data: userData, data: userData,
schema: 'teachit-data-schema-v1.0', schema: 'learnit-data-schema-v1.0',
}; };
} }
@@ -1433,30 +1433,30 @@ export class SecurityDashboard {
### Security Team ### Security Team
#### Incident Response Team #### Incident Response Team
- **Security Lead**: security@teachit.app - **Security Lead**: security@learnit.app
- **Incident Response**: incidents@teachit.app - **Incident Response**: incidents@learnit.app
- **Vulnerability Reports**: vulnerabilities@teachit.app - **Vulnerability Reports**: vulnerabilities@learnit.app
- **Compliance Officer**: compliance@teachit.app - **Compliance Officer**: compliance@learnit.app
#### Emergency Contacts #### Emergency Contacts
- **Critical Incidents**: +1-800-SECURITY - **Critical Incidents**: +1-800-SECURITY
- **Data Breach**: +1-800-BREACH - **Data Breach**: +1-800-BREACH
- **Legal Counsel**: legal@teachit.app - **Legal Counsel**: legal@learnit.app
- **Law Enforcement**: emergency@teachit.app - **Law Enforcement**: emergency@learnit.app
### Reporting Security Issues ### Reporting Security Issues
#### Vulnerability Disclosure #### Vulnerability Disclosure
- **Email**: security@teachit.app - **Email**: security@learnit.app
- **PGP Key**: Available on request - **PGP Key**: Available on request
- **Response Time**: Within 24 hours - **Response Time**: Within 24 hours
- **Bounty Program**: Available for qualifying reports - **Bounty Program**: Available for qualifying reports
#### Data Subject Requests #### Data Subject Requests
- **Access Requests**: privacy@teachit.app - **Access Requests**: privacy@learnit.app
- **Deletion Requests**: delete@teachit.app - **Deletion Requests**: delete@learnit.app
- **Correction Requests**: corrections@teachit.app - **Correction Requests**: corrections@learnit.app
- **Complaints**: complaints@teachit.app - **Complaints**: complaints@learnit.app
--- ---

View File

@@ -109,9 +109,9 @@ import 'package:flutter_test/flutter_test.dart';
import 'package:mockito/mockito.dart'; import 'package:mockito/mockito.dart';
import 'package:dartz/dartz.dart'; import 'package:dartz/dartz.dart';
import 'package:teachit/features/auth/domain/entities/user.dart'; import 'package:learn_it/features/auth/domain/entities/user.dart';
import 'package:teachit/features/auth/domain/repositories/auth_repository.dart'; import 'package:learn_it/features/auth/domain/repositories/auth_repository.dart';
import 'package:teachit/features/auth/domain/usecases/sign_in.dart'; import 'package:learn_it/features/auth/domain/usecases/sign_in.dart';
class MockAuthRepository extends Mock implements AuthRepository {} class MockAuthRepository extends Mock implements AuthRepository {}
@@ -353,7 +353,7 @@ import 'package:mockito/mockito.dart';
import 'package:mockito/annotations.dart'; import 'package:mockito/annotations.dart';
import 'package:teachit/features/auth/presentation/screens/login_screen.dart'; import 'package:teachit/features/auth/presentation/screens/login_screen.dart';
import 'package:teachit/features/auth/presentation/providers/auth_provider.dart'; import 'package:learn_it/features/auth/presentation/providers/auth_provider.dart';
import 'login_screen_test.mocks.dart'; import 'login_screen_test.mocks.dart';
@@ -516,9 +516,9 @@ import 'package:firebase_core/firebase_core.dart';
import 'package:cloud_firestore/cloud_firestore.dart'; import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:firebase_auth/firebase_auth.dart'; import 'package:firebase_auth/firebase_auth.dart';
import 'package:teachit/main.dart' as app; import 'package:learn_it/main.dart' as app;
import 'package:teachit/features/auth/presentation/screens/login_screen.dart'; import 'package:teachit/features/auth/presentation/screens/login_screen.dart';
import 'package:teachit/features/student/presentation/screens/student_dashboard_screen.dart'; import 'package:learn_it/features/student/presentation/screens/student_dashboard_screen.dart';
void main() { void main() {
group('Authentication Flow Integration Tests', () { group('Authentication Flow Integration Tests', () {
@@ -767,7 +767,7 @@ import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart'; import 'package:flutter_test/flutter_test.dart';
import 'package:integration_test/integration_test.dart'; import 'package:integration_test/integration_test.dart';
import 'package:teachit/main.dart' as app; import 'package:learn_it/main.dart' as app;
void main() { void main() {
IntegrationTestWidgetsFlutterBinding.ensureInitialized(); IntegrationTestWidgetsFlutterBinding.ensureInitialized();

View File

@@ -17,7 +17,7 @@ Welcome to the AI Study Assistant! This comprehensive guide will help you master
#### 1. Download and Install #### 1. Download and Install
- **Android**: Download from Google Play Store - **Android**: Download from Google Play Store
- **iOS**: Download from App Store - **iOS**: Download from App Store
- **Web**: Visit [app.teachit.app](https://app.teachit.app) - **Web**: Visit [app.learnit.app](https://app.learnit.app)
#### 2. Create Account #### 2. Create Account
1. Open the app 1. Open the app
@@ -475,8 +475,8 @@ Monitor class performance with:
- **Tutoring Services**: Additional support - **Tutoring Services**: Additional support
#### Technical Support #### Technical Support
- **Email**: support@teachit.app - **Email**: support@learnit.app
- **Phone**: 1-800-TEACH-IT - **Phone**: 1-800-LEARN-IT
- **Live Chat**: In-app chat support - **Live Chat**: In-app chat support
- **Community Forum**: User discussions - **Community Forum**: User discussions
@@ -565,10 +565,10 @@ Monitor class performance with:
### Contact Information ### Contact Information
#### Support Channels #### Support Channels
- **Email Support**: support@teachit.app - **Email Support**: support@learnit.app
- **Phone Support**: 1-800-TEACH-IT - **Phone Support**: 1-800-LEARN-IT
- **Live Chat**: In-app support - **Live Chat**: In-app support
- **Social Media**: @TeachItApp - **Social Media**: @LearnItApp
#### School Support #### School Support
- **IT Department**: Technical assistance - **IT Department**: Technical assistance
@@ -602,10 +602,10 @@ Monitor class performance with:
- **Esc**: Cancel/close - **Esc**: Cancel/close
### Emergency Contacts ### Emergency Contacts
- **Technical Issues**: support@teachit.app - **Technical Issues**: support@learnit.app
- **Account Problems**: admin@teachit.app - **Account Problems**: admin@learnit.app
- **Security Concerns**: security@teachit.app - **Security Concerns**: security@learnit.app
- **Emergency**: 1-800-TEACH-IT - **Emergency**: 1-800-LEARN-IT
--- ---

View File

@@ -7,7 +7,7 @@
<key>CFBundleDevelopmentRegion</key> <key>CFBundleDevelopmentRegion</key>
<string>$(DEVELOPMENT_LANGUAGE)</string> <string>$(DEVELOPMENT_LANGUAGE)</string>
<key>CFBundleDisplayName</key> <key>CFBundleDisplayName</key>
<string>Teachit</string> <string>Learn It</string>
<key>CFBundleExecutable</key> <key>CFBundleExecutable</key>
<string>$(EXECUTABLE_NAME)</string> <string>$(EXECUTABLE_NAME)</string>
<key>CFBundleIdentifier</key> <key>CFBundleIdentifier</key>
@@ -15,7 +15,7 @@
<key>CFBundleInfoDictionaryVersion</key> <key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string> <string>6.0</string>
<key>CFBundleName</key> <key>CFBundleName</key>
<string>teachit</string> <string>learnit</string>
<key>CFBundlePackageType</key> <key>CFBundlePackageType</key>
<string>APPL</string> <string>APPL</string>
<key>CFBundleShortVersionString</key> <key>CFBundleShortVersionString</key>

View File

@@ -47,11 +47,9 @@ class _TeacherMaterialsPageState extends State<TeacherMaterialsPage> {
appBar: AppBar( appBar: AppBar(
title: const Text( title: const Text(
'Materiais da Disciplina', 'Materiais da Disciplina',
style: TextStyle(color: Colors.white, fontWeight: FontWeight.bold), style: TextStyle(fontWeight: FontWeight.bold),
), ),
backgroundColor: const Color(0xFF82C9BD),
elevation: 0, elevation: 0,
iconTheme: const IconThemeData(color: Colors.white),
), ),
floatingActionButton: _isUploading floatingActionButton: _isUploading
? FloatingActionButton.extended( ? FloatingActionButton.extended(
@@ -81,12 +79,17 @@ class _TeacherMaterialsPageState extends State<TeacherMaterialsPage> {
), ),
body: Container( body: Container(
decoration: const BoxDecoration( decoration: BoxDecoration(
gradient: LinearGradient( gradient: LinearGradient(
begin: Alignment.topCenter, begin: Alignment.topCenter,
end: Alignment.bottomCenter, end: Alignment.bottomCenter,
colors: [Color(0xFF82C9BD), Color(0xFFF8F9FA)], colors: Theme.of(context).brightness == Brightness.dark
stops: [0.0, 0.4], ? [
Theme.of(context).colorScheme.primary.withOpacity(0.3),
Theme.of(context).colorScheme.background,
]
: [const Color(0xFF82C9BD), const Color(0xFFF8F9FA)],
stops: const [0.0, 0.4],
), ),
), ),
child: SafeArea( child: SafeArea(
@@ -196,13 +199,14 @@ class _TeacherMaterialsPageState extends State<TeacherMaterialsPage> {
} }
void _showUploadOptions() { void _showUploadOptions() {
final cs = Theme.of(context).colorScheme;
showModalBottomSheet( showModalBottomSheet(
context: context, context: context,
backgroundColor: Colors.transparent, backgroundColor: Colors.transparent,
builder: (context) => Container( builder: (context) => Container(
decoration: const BoxDecoration( decoration: BoxDecoration(
color: Colors.white, color: cs.surface,
borderRadius: BorderRadius.vertical(top: Radius.circular(20)), borderRadius: const BorderRadius.vertical(top: Radius.circular(20)),
), ),
child: SafeArea( child: SafeArea(
child: Padding( child: Padding(
@@ -216,7 +220,7 @@ class _TeacherMaterialsPageState extends State<TeacherMaterialsPage> {
width: 40, width: 40,
height: 4, height: 4,
decoration: BoxDecoration( decoration: BoxDecoration(
color: Colors.grey[300], color: cs.onSurface.withOpacity(0.2),
borderRadius: BorderRadius.circular(2), borderRadius: BorderRadius.circular(2),
), ),
), ),

View File

@@ -154,7 +154,7 @@ class HelpPage extends StatelessWidget {
context: context, context: context,
question: 'Como contactar o suporte?', question: 'Como contactar o suporte?',
answer: answer:
'Pode contactar-nos através do email suporte@teachit.com.', 'Pode contactar-nos através do email suporte@learnit.com.',
), ),
], ],
), ),

View File

@@ -4,10 +4,10 @@ project(runner LANGUAGES CXX)
# The name of the executable created for the application. Change this to change # The name of the executable created for the application. Change this to change
# the on-disk name of your application. # the on-disk name of your application.
set(BINARY_NAME "teachit") set(BINARY_NAME "learnit")
# The unique GTK application identifier for this application. See: # The unique GTK application identifier for this application. See:
# https://wiki.gnome.org/HowDoI/ChooseApplicationID # https://wiki.gnome.org/HowDoI/ChooseApplicationID
set(APPLICATION_ID "com.example.teachit") set(APPLICATION_ID "com.example.learnit")
# Explicitly opt in to modern CMake behaviors to avoid warnings with recent # Explicitly opt in to modern CMake behaviors to avoid warnings with recent
# versions of CMake. # versions of CMake.

View File

@@ -5,10 +5,10 @@
// 'flutter create' template. // 'flutter create' template.
// The application's name. By default this is also the title of the Flutter window. // The application's name. By default this is also the title of the Flutter window.
PRODUCT_NAME = teachit PRODUCT_NAME = Learn It
// The application's bundle identifier // The application's bundle identifier
PRODUCT_BUNDLE_IDENTIFIER = com.example.teachit PRODUCT_BUNDLE_IDENTIFIER = com.example.learnit
// The copyright displayed in application information // The copyright displayed in application information
PRODUCT_COPYRIGHT = Copyright © 2026 com.example. All rights reserved. PRODUCT_COPYRIGHT = Copyright © 2026 com.example. All rights reserved.

View File

@@ -1,4 +1,4 @@
name: teachit name: learn_it
description: "AI Study Assistant - Educational Intelligence Platform" description: "AI Study Assistant - Educational Intelligence Platform"
# The following line prevents the package from being accidentally published to # The following line prevents the package from being accidentally published to
# pub.dev using `flutter pub publish`. This is preferred for private packages. # pub.dev using `flutter pub publish`. This is preferred for private packages.

View File

@@ -8,7 +8,7 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart'; import 'package:flutter_test/flutter_test.dart';
import 'package:teachit/main.dart'; import 'package:learn_it/main.dart';
void main() { void main() {
testWidgets('Counter increments smoke test', (WidgetTester tester) async { testWidgets('Counter increments smoke test', (WidgetTester tester) async {

View File

@@ -23,13 +23,13 @@
<!-- iOS meta tags & icons --> <!-- iOS meta tags & icons -->
<meta name="mobile-web-app-capable" content="yes"> <meta name="mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black"> <meta name="apple-mobile-web-app-status-bar-style" content="black">
<meta name="apple-mobile-web-app-title" content="teachit"> <meta name="apple-mobile-web-app-title" content="Learn It">
<link rel="apple-touch-icon" href="icons/Icon-192.png"> <link rel="apple-touch-icon" href="icons/Icon-192.png">
<!-- Favicon --> <!-- Favicon -->
<link rel="icon" type="image/png" href="favicon.png"/> <link rel="icon" type="image/png" href="favicon.png"/>
<title>teachit</title> <title>Learn It</title>
<link rel="manifest" href="manifest.json"> <link rel="manifest" href="manifest.json">
</head> </head>
<body> <body>

View File

@@ -1,6 +1,6 @@
{ {
"name": "teachit", "name": "Learn It",
"short_name": "teachit", "short_name": "Learn It",
"start_url": ".", "start_url": ".",
"display": "standalone", "display": "standalone",
"background_color": "#0175C2", "background_color": "#0175C2",

View File

@@ -1,10 +1,10 @@
# Project-level configuration. # Project-level configuration.
cmake_minimum_required(VERSION 3.14) cmake_minimum_required(VERSION 3.14)
project(teachit LANGUAGES CXX) project(learnit LANGUAGES CXX)
# The name of the executable created for the application. Change this to change # The name of the executable created for the application. Change this to change
# the on-disk name of your application. # the on-disk name of your application.
set(BINARY_NAME "teachit") set(BINARY_NAME "learnit")
# Explicitly opt in to modern CMake behaviors to avoid warnings with recent # Explicitly opt in to modern CMake behaviors to avoid warnings with recent
# versions of CMake. # versions of CMake.

View File

@@ -90,12 +90,12 @@ BEGIN
BLOCK "040904e4" BLOCK "040904e4"
BEGIN BEGIN
VALUE "CompanyName", "com.example" "\0" VALUE "CompanyName", "com.example" "\0"
VALUE "FileDescription", "teachit" "\0" VALUE "FileDescription", "Learn It" "\0"
VALUE "FileVersion", VERSION_AS_STRING "\0" VALUE "FileVersion", VERSION_AS_STRING "\0"
VALUE "InternalName", "teachit" "\0" VALUE "InternalName", "learnit" "\0"
VALUE "LegalCopyright", "Copyright (C) 2026 com.example. All rights reserved." "\0" VALUE "LegalCopyright", "Copyright (C) 2026 com.example. All rights reserved." "\0"
VALUE "OriginalFilename", "teachit.exe" "\0" VALUE "OriginalFilename", "learnit.exe" "\0"
VALUE "ProductName", "teachit" "\0" VALUE "ProductName", "Learn It" "\0"
VALUE "ProductVersion", VERSION_AS_STRING "\0" VALUE "ProductVersion", VERSION_AS_STRING "\0"
END END
END END

View File

@@ -27,7 +27,7 @@ int APIENTRY wWinMain(_In_ HINSTANCE instance, _In_opt_ HINSTANCE prev,
FlutterWindow window(project); FlutterWindow window(project);
Win32Window::Point origin(10, 10); Win32Window::Point origin(10, 10);
Win32Window::Size size(1280, 720); Win32Window::Size size(1280, 720);
if (!window.Create(L"teachit", origin, size)) { if (!window.Create(L"Learn It", origin, size)) {
return EXIT_FAILURE; return EXIT_FAILURE;
} }
window.SetQuitOnClose(true); window.SetQuitOnClose(true);