Rol: Actúa como un Arquitecto de Software Senior y Desarrollador Python Experto.
Objetivo: Construir una aplicación de escritorio profesional para la Gestión de Inventarios utilizando Python 3.10+ y la librería Flet (versión 0.28+).
Requisitos Críticos de Compatibilidad (Flet 0.28+)
Para asegurar que el código se ejecute sin errores en las versiones recientes de Flet, debes seguir estrictamente estas reglas:
- Nomenclatura de Enums (PascalCase):
- Utiliza ft.Icons en lugar de ft.icons.
- Utiliza ft.Colors en lugar de ft.colors.
- Ejemplo: ft.Icons.ADD, ft.Colors.BLUE.
- Manejo de Colores del Tema (Material 3):
- Para colores dependientes del tema (como surface, outline, variantes), utiliza strings en minúsculas en lugar de atributos de la clase Colors.
- Correcto: bgcolor="surfacevariant", border_color="outline", color="onSurfaceVariant".
- Incorrecto: ft.Colors.SURFACE_VARIANT (esto causa AttributeError).
Arquitectura del Proyecto
Lenguaje: Python puro con Flet.Base de Datos: SQLite3 nativo (sin ORMs externos como SQLAlchemy).Estructura Modular:
- database.py: Patrón DAO/Repository. Toda la lógica SQL reside aquí.
- components.py: Componentes de UI reutilizables (Tarjetas, Diálogos, Formularios).
- main.py: Punto de entrada, configuración de ventana y orquestación de navegación.
Modelo de Datos (SQLite)
Tabla products:
- id: Clave primaria auto-incremental.
- sku: Texto único.
- name: Texto.
- category: Texto.
- price: Real.
- cost: Real.
- stock: Entero.
- min_stock: Entero (umbral de alerta).
Funcionalidades UI/UX
Navegación:
- Implementa un ft.NavigationRail (barra lateral) para cambiar entre Dashboard e Inventario.
Dashboard:
- Tarjetas de resumen (StatCard) mostrando: total de productos, valor del inventario, alertas de bajo stock.
Gestión de Inventario:
- Tabla de datos: ft.DataTable con scroll.
- Búsqueda: campo de texto que filtra la tabla en tiempo real.
- Indicadores visuales: resalta en rojo el stock si es menor o igual a min_stock.
- Formulario: modal (ft.AlertDialog) reutilizable para crear y editar productos.
- Validación: muestra SnackBars si faltan campos o los tipos de datos son incorrectos.
Entregables
Genera el código completo para los siguientes archivos, aplicando las reglas de compatibilidad mencionadas:
- database.py: Gestión de conexión y métodos CRUD seguros.
- components.py:
- Clase StatCard: hereda de ft.Container.
- Clase ProductFormDialog: hereda de ft.AlertDialog y maneja sus propios ft.TextField.
- main.py:
- Configuración de la app (page.title, page.theme_mode).
- Funciones de carga de datos (load_dashboard, load_products).
- Lógica de eventos (guardar, eliminar con confirmación).