Saltar al contenido principal

Keys

lib/core/keys/ centraliza todas las constantes de tipo clave (strings usados como identificadores) de la app. El objetivo es eliminar los magic strings: no debe existir ningún string literal suelto para acceder a variables de entorno o al storage local.

EnvKey​

Constantes para los nombres de las variables de entorno. Se usan para leer la configuración de la app al iniciar (flavor, URLs de API, DSN de Sentry, etc.).

lib/core/keys/env_key.dart
class EnvKey {
EnvKey._();

static const String devApiUrl = 'DEV_API_URL';
static const String stagingApiUrl = 'STAGING_API_URL';
static const String prodApiUrl = 'PROD_API_URL';
}

Uso:

// ✅ Correcto — usando la constante
final apiUrl = const String.fromEnvironment(EnvKey.devApiUrl);

// ❌ Incorrecto — string literal suelto
final apiUrl = const String.fromEnvironment('DEV_API_URL');

DeviceStorageKeys​

Constantes para las claves del SharedPreferences (almacenamiento local persistente). Garantizan que el mismo string se use consistentemente en todas las lecturas y escrituras.

lib/core/keys/device_storage_keys.dart
class DeviceStorageKeys {
DeviceStorageKeys._();

// Authentication and security keys are defined here but their
// exact names are internal to the project.

// App settings
static const String themeMode = 'theme_mode';
static const String onboardingCompleted = 'onboarding_completed';
}
nota

Las claves de autenticación y seguridad (tokens, credenciales locales) existen en esta clase pero sus nombres son internos al proyecto. Consúltalas directamente en el código fuente.

Uso:

// ✅ Correcto — usando la constante
final themeMode = await _storage.getString(DeviceStorageKeys.themeMode);
await _storage.setString(DeviceStorageKeys.themeMode, 'dark');

// ❌ Incorrecto — string literal suelto
final themeMode = await _storage.getString('theme_mode');

Reglas​

No duplicar claves​

Cada clave debe definirse una sola vez en DeviceStorageKeys o EnvKey. Si dos partes de la app necesitan acceder al mismo valor, ambas usan la misma constante.

No crear claves fuera del core​

Las claves de storage y de entorno nunca se definen en los features. Si un feature necesita persistir un nuevo valor, la clave se agrega a DeviceStorageKeys en el core.

Prefijo por dominio (cuando el volumen crece)​

Si la cantidad de claves crece, se recomienda agruparlas con prefijos para evitar colisiones accidentales entre módulos:

// Settings
static const String settingsThemeMode = 'settings.theme_mode';
static const String settingsLanguage = 'settings.language';

// Onboarding
static const String onboardingCompleted = 'onboarding.completed';
static const String onboardingStep = 'onboarding.step';

Estructura de archivos​

lib/
└── core/
└── keys/
├── env_key.dart
├── device_storage_keys.dart
└── keys.dart # Barrel file
lib/core/keys/keys.dart
export 'env_key.dart';
export 'device_storage_keys.dart';