Troca de desing

This commit is contained in:
Carlos Correia
2026-05-18 15:04:07 +01:00
parent 9b4c2f7e04
commit 9999011cfd
9 changed files with 3000 additions and 2138 deletions

View File

@@ -1,14 +1,18 @@
import 'package:flutter/material.dart';
class ItemCategory {
final String id;
final String name;
final String icon;
final IconData icon;
final Color color;
final String description;
final List<Subcategory> subcategories;
ItemCategory({
const ItemCategory({
required this.id,
required this.name,
required this.icon,
required this.color,
required this.description,
required this.subcategories,
});
@@ -17,9 +21,13 @@ class ItemCategory {
class Subcategory {
final String id;
final String name;
final String examples;
final String description;
Subcategory({required this.id, required this.name, required this.examples});
const Subcategory({
required this.id,
required this.name,
required this.description,
});
}
class ContextTag {
@@ -28,7 +36,7 @@ class ContextTag {
final String description;
final String examples;
ContextTag({
const ContextTag({
required this.id,
required this.name,
required this.description,
@@ -36,174 +44,188 @@ class ContextTag {
});
}
// Categorias principais
// Lista de categorias principais
final List<ItemCategory> itemCategories = [
ItemCategory(
id: 'clothing',
name: 'Roupa',
icon: '👕',
icon: Icons.checkroom_rounded,
color: const Color(0xFFEC4899),
description: 'Peças de vestuário',
subcategories: [
Subcategory(
id: 'casual',
name: 'Casual',
examples: 't-shirts, calças de ganga, hoodies',
),
Subcategory(
id: 'formal',
name: 'Formal',
examples: 'fatos, camisas, vestidos de cerimónia',
description: 'fato, camisa, blazer, vestido',
),
Subcategory(
id: 'casual',
name: 'Casual',
description: 't-shirt, jeans, hoodie',
),
Subcategory(
id: 'sportswear',
name: 'Sportswear',
examples: 'leggings, tops de treino, shorts',
description: 'leggings, calções, top desportivo',
),
Subcategory(
id: 'outerwear',
name: 'Outerwear',
examples: 'casacos, impermeáveis, parkas',
description: 'casaco, blusão, sobretudo',
),
Subcategory(
id: 'underwear',
name: 'Underwear',
examples: 'roupa interior, meias',
description: 'cuecas, meias, sutiãs',
),
Subcategory(
id: 'sleepwear',
name: 'Sleepwear',
examples: 'pijamas, roupões',
description: 'pijamas, roupões',
),
],
),
ItemCategory(
id: 'electronics',
name: 'Eletrónica',
icon: '💻',
icon: Icons.devices_other_rounded,
color: const Color(0xFF8B5CF6),
description: 'Dispositivos e acessórios tecnológicos',
subcategories: [
Subcategory(
id: 'computers',
name: 'Computers',
examples: 'portáteis, tablets',
name: 'Computadores',
description: 'portátil, tablet',
),
Subcategory(
id: 'phones',
name: 'Phones',
examples: 'smartphones, earphones',
name: 'Telemóveis',
description: 'smartphone, smartwatch',
),
Subcategory(
id: 'cameras',
name: 'Cameras',
examples: 'máquinas fotográficas, action cams',
id: 'audio',
name: 'Áudio',
description: 'auscultadores, colunas',
),
Subcategory(
id: 'cables',
name: 'Cables',
examples: 'carregadores, cabos USB, adaptadores',
name: 'Cabos e Carregadores',
description: 'USB, power bank',
),
Subcategory(
id: 'cameras',
name: 'Câmaras',
description: 'fotográfica, GoPro, drone',
),
Subcategory(
id: 'gaming',
name: 'Gaming',
examples: 'consolas, comandos, jogos',
),
Subcategory(
id: 'audio',
name: 'Audio',
examples: 'headphones, colunas bluetooth',
description: 'consola, comandos',
),
],
),
ItemCategory(
id: 'footwear',
name: 'Calçado',
icon: '👟',
icon: Icons.hiking_rounded,
color: const Color(0xFFF59E0B),
description: 'Sapatos, botas, sandálias',
subcategories: [
Subcategory(
id: 'casual',
name: 'Casual',
examples: 'sapatilhas, loafers',
),
Subcategory(
id: 'formal',
name: 'Formal',
examples: 'sapatos de salto, mocassins',
description: 'sapatos de vestir',
),
Subcategory(
id: 'casual',
name: 'Casual',
description: 'sapatilhas do dia-a-dia',
),
Subcategory(
id: 'sport',
name: 'Sport',
examples: 'ténis de corrida, chuteiras',
name: 'Desporto',
description: 'ténis de corrida, futebol',
),
Subcategory(
id: 'outdoor',
name: 'Outdoor',
examples: 'botas de caminhada, sandálias',
description: 'botas de montanha',
),
Subcategory(
id: 'sandals',
name: 'Sandálias',
description: 'chinelos, sandálias',
),
],
),
ItemCategory(
id: 'accessories',
name: 'Acessórios',
icon: '🎒',
icon: Icons.work_outline_rounded,
color: const Color(0xFF10B981),
description: 'Bolsas, relógios, óculos, bijuteria',
subcategories: [
Subcategory(
id: 'bags',
name: 'Bags',
examples: 'mochilas, malas, bolsas',
name: 'Malas e Bolsas',
description: 'mochila, mala, carteira',
),
Subcategory(
id: 'watches',
name: 'Watches',
examples: 'relógios analógicos e digitais',
),
Subcategory(
id: 'eyewear',
name: 'Eyewear',
examples: 'óculos de sol, óculos de grau',
name: 'Relógios',
description: 'relógios analógicos e digitais',
),
Subcategory(
id: 'jewelry',
name: 'Jewelry',
examples: 'colares, pulseiras, brincos',
name: 'Joias e Bijuteria',
description: 'colares, anéis, brincos',
),
Subcategory(
id: 'eyewear',
name: 'Óculos',
description: 'óculos de sol, graduados',
),
Subcategory(
id: 'hats',
name: 'Chapéus',
description: 'bonés, chapéus, gorros',
),
Subcategory(id: 'hats', name: 'Hats', examples: 'bonés, chapéus, gorros'),
Subcategory(id: 'belts', name: 'Belts', examples: 'cintos'),
],
),
ItemCategory(
id: 'documents',
name: 'Documentos',
icon: '📄',
icon: Icons.description_rounded,
color: const Color(0xFFEF4444),
description: 'Passaporte, cartões, papéis importantes',
subcategories: [
Subcategory(
id: 'identity',
name: 'Identity',
examples: 'passaporte, BI, carta de condução',
),
Subcategory(
id: 'health',
name: 'Health',
examples: 'cartão de saúde, receitas',
name: 'Identidade',
description: 'cartão de cidadão, carta de condução',
),
Subcategory(
id: 'travel',
name: 'Travel',
examples: 'bilhetes, reservas, seguros',
name: 'Viagem',
description: 'passaporte, visto',
),
Subcategory(
id: 'financial',
name: 'Financial',
examples: 'cartões de crédito/débito',
id: 'cards',
name: 'Cartões',
description: 'crédito, débito, fidelização',
),
Subcategory(
id: 'health',
name: 'Saúde',
description: 'cartão de saúde, receitas',
),
],
),
ItemCategory(
id: 'other',
name: 'Outros',
icon: '📦',
icon: Icons.inventory_2_rounded,
color: const Color(0xFF64748B),
description: 'Tudo o resto',
subcategories: [],
),
@@ -291,3 +313,12 @@ List<String> getAutoContextTags(String categoryId, String subcategoryId) {
return autoTags[key] ?? [];
}
/// Helper to fetch a category by id, falling back to "Outros".
ItemCategory categoryById(String? id) {
if (id == null) return itemCategories.last;
return itemCategories.firstWhere(
(c) => c.id == id,
orElse: () => itemCategories.last,
);
}