Skip to main content
Esta referencia cubre los tipos públicos que acompañan a los widgets. Usa los imports de las bibliotecas públicas del paquete.

Entrypoints

Los tipos core no se incluyen en el barrel de widgets, para mantener el límite de dominio y evitar conflictos con excepciones del consumidor. material.dart tampoco se reexporta. Los nombres de app que aparecen en tutoriales (AppIsselController, CustomerEntity, etc.) son ejemplos locales.

IsselAppConfig

Configuración inmutable del kit para una app. Importa desde issel_app.dart o el barrel de widgets.
Las cinco propiedades se leen con sus nombres. copyWith({title, lightTheme, darkTheme, themeMode, desktop}) devuelve otra configuración; todos sus argumentos son opcionales y nulos para conservar el valor existente. No contiene endpoints, destinos, sesión, permisos ni persistencia.

IsselAppController

Extiende IsselController; concentra configuración, tema y navegación.
updateConfig conserva identidad de .theme, .navigation y navigatorKey. El controlador también observa cambios directos del tema y los copia a .config. La raíz escucha al controlador de app para reconstruir MaterialApp. updateConfig tras dispose lanza StateError. Si tienes listeners directos de .theme, cada actualización clara/oscura puede notificarlos durante updateConfig; la notificación única indicada corresponde al controlador de app. La fachada del producto concentra métodos específicos usando config.copyWith.

IsselController

Clase abstracta de presentación basada en ChangeNotifier. No pertenece al dominio. Hereda listeners de ChangeNotifier. notifyIfActive evita avisos tardíos, pero no impide por sí mismo mutar campos ni cancela Futures. Comprueba isDisposed antes de asignar tras un await, libera recursos propios antes de super.dispose() y mantén un único dueño.

IsselColors

Clase abstract final de constantes. No se instancia. Los controles leen el tema en vez de depender de estas constantes. Úsalas para construir defaults cuando sea necesario. En las vistas prefiere los roles efectivos del tema y los overrides centralizados.

IsselThemeColors

Paleta semántica inmutable. El constructor general exige todos los roles excepto outlineVariant:
Los constructores const IsselThemeColors.light({...}) y .dark({...}) permiten overrides opcionales de todos los colores y fijan brightness respectivamente a claro y oscuro. Los defaults completos están en tema y configuración. scaffoldBackground se aplica en ThemeData.scaffoldBackgroundColor, no como una propiedad extra del ColorScheme. outlineVariant: null en un constructor utiliza el generado por semilla; en copyWith null conserva el anterior. Para volver al valor generado crea una paleta nueva según tu configuración. La igualdad de scaffoldBackground y surfaceContainer es un contrato visual de la skill/defaults. La clase no obliga a esa igualdad mediante assertions.

IsselTextThemeConfig

Configuración inmutable que construye un TextTheme. Constructor const y copyWith con los siguientes parámetros: build({Color? onSurface, required Color outline}) devuelve el TextTheme con tamaños/pesos del kit, escala global y familia. outline pinta labels. Consulta la tabla de tamaños para las 15 variantes. copyWith recibe los mismos campos con tipos nulos para conservar valores. No permite limpiar fontFamily pasando null; crea una configuración nueva para quitarla. El paquete no descarga fuentes y no valida rangos de escala en este tipo. La app limita su editor y revisa accesibilidad/layout.

IsselThemeConfig

El tema configura fondo, esquema, AppBar sin surface tint, FAB circular, Card con superficie/radio, divisores, ListTile y TextTheme. borderRadius afecta a ListTileTheme y cardBorderRadius a CardThemeData; los widgets que fijan radios propios conservan esos valores.

IsselThemeController

Controlador basado directamente en ChangeNotifier, con constructor:
Si se suministra light o dark, esa configuración tiene prioridad sobre el color/texto abreviado de su variante. Si falta, construye una configuración con los defaults o los argumentos abreviados. No ofrece isDisposed de IsselController. Cuando pertenece a IsselAppController, éste es su dueño y lo libera. No dispongas .theme por separado desde una vista. El modo sistema no convierte una llamada a updateLightColors en edición de ambas paletas; esa política se implementa en la fachada del producto.

IsselDesktopConfig

Propiedades inmutables con esos nombres y copyWith de las cuatro. Assertions: sidebarWidth > 0, captionHeight >= 28, sidebarBreakpoint > sidebarWidth. La curva del shell es easeOutCubic; no es propiedad configurable en este tipo.

Modelos auxiliares de selección y escritorio

Estos tipos no implementan repositorios, destinos ni almacenamiento. Los genéricos comparan selección mediante == de sus valores; usa identificadores estables o define igualdad apropiada en tus entidades.

IsselNavigationService

Si no recibe clave, crea una propia. navigatorKey es final. Conecta la misma clave a MaterialApp. Las operaciones requieren Navigator montado o lanzan StateError. El nombre predeterminado es runtimeType.toString; settings.arguments se conserva. goBack: true puede indicar un retroceso atendido por PopScope que mantuvo la ruta. La guía de navegación incluye el ejemplo tipado y explica cuándo utilizar un router.

AppException

Tipo Dart que implementa Exception. Importa issel_core.dart.
Cuatro propiedades final con los mismos nombres. message es seguro para UI; causa/traza conservan diagnóstico. toString() muestra AppException: mensaje o AppException (código): mensaje; no incluye automáticamente causa o traza. El mensaje seguro depende del texto que suministre el consumidor.

AppFailure

Tiene el mismo constructor y propiedades que AppException, pero representa un fallo esperado que se devuelve como dato:
La fábrica copia los cuatro campos. toString() utiliza el prefijo AppFailure, con código opcional. La app define los códigos y recuperación. Ni este tipo ni la excepción implementan igualdad por valor o serialización personalizada.

AppResult<T>, AppSuccess<T> y AppError<T>

AppResult<T> es sealed y tiene constructor base const y dos fábricas:
Un éxito de tipo nullable puede contener null; eso no es un error. No hay propiedades data, isError ni métodos map/when en esta API. Puedes utilizar switch exhaustivo o fold, sin dartz.
Este código pertenece a datos/dominio y no importa Flutter. La pantalla mantiene por separado sus estados de carga, vacío y error persistente. El formulario de clientes muestra una operación completa que devuelve el resultado y produce feedback desde la vista.