Skip to content
get_it logo

Extensión DevTools

get_it incluye una extensión de DevTools que te permite visualizar e inspeccionar todos los objetos registrados en tu app Flutter en ejecución en tiempo real.

Características clave:

  • Ver todos los registros - Ve cada objeto registrado en `get_it` a través de todos los scopes
  • Inspeccionar estado de instancia - Ve la salida de toString() de instancias creadas
  • Rastrear detalles de registro - Tipo, scope, modo, estado async, estado ready, estado de creación
  • Actualizaciones en tiempo real - Se refresca automáticamente cuando los registros cambian (con eventos de depuración habilitados)

Configuración

1. Habilita Eventos de Depuración

En el main.dart de tu app, habilita los eventos de depuración antes de ejecutar tu app:

dart
void main() {
  GetIt.instance.debugEventsEnabled = true;

  // ... configura tus dependencias
  configureDependencies();

  runApp(MyApp());
}

¿Por Qué Habilitar Eventos de Depuración?

Cuando debugEventsEnabled es true, get_it envía eventos a DevTools cada vez que los registros cambian, permitiendo que la extensión se actualice automáticamente. Sin esto, necesitarás refrescar manualmente la extensión para ver cambios.

Solo Modo Debug

La extensión DevTools solo funciona en modo debug. En builds de release, la extensión no está disponible y los eventos de depuración no tienen efecto.

2. Ejecuta Tu App en Modo Debug

bash
flutter run

3. Abre DevTools en el Navegador

La extensión de get_it actualmente solo funciona en DevTools basado en navegador, no en DevTools embebido en IDE.

Cuando ejecutes tu app, Flutter mostrará un mensaje como:

The Flutter DevTools debugger and profiler is available at: http://127.0.0.1:9100

Abre esa URL en tu navegador.

4. Habilita la Extensión

  1. En DevTools, haz clic en el botón Extensions (ícono de pieza de rompecabezas) en la esquina superior derecha
  2. Encuentra la extensión get_it en la lista y habilítala
  3. La pestaña "get_it" aparecerá en la navegación principal de DevTools

5. Abre la Pestaña get_it

Haz clic en la pestaña "get_it" para ver todos tus registros.


Entendiendo la Tabla de Registros

La extensión DevTools muestra todos los objetos registrados en una tabla con las siguientes columnas:

Extensión DevTools de get_itLa extensión DevTools de get_it mostrando todos los objetos registrados en una app en ejecución

ColumnaDescripción
TypeEl tipo registrado (nombre de clase)
Instance NameEl nombre de instancia si se usan registros con nombre, de lo contrario vacío
ScopeEl scope al que pertenece este registro (ej., baseScope para el scope por defecto)
ModeEl tipo de registro: constant (singleton), lazy (lazy singleton), alwaysNew (factory), o cachedFactory
AsyncSi este es un registro async (true para registerSingletonAsync y registerLazySingletonAsync)
ReadyPara registros async, si la inicialización está completa
CreatedSi la instancia ha sido creada (false para registros lazy que no han sido accedidos aún)
Instance DetailsLa salida de toString() de la instancia (si está creada)

Haciendo los Detalles de Instancia Significativos

Por defecto, el toString() de Dart solo muestra el nombre del tipo e ID de instancia (ej., Instance of 'UserRepository'). Para ver detalles significativos en la extensión DevTools, sobrescribe toString() en tus clases registradas:

dart
class UserRepository {
  final String userId;
  final bool isAuthenticated;

  UserRepository(this.userId, this.isAuthenticated);

  @override
  String toString() {
    return 'UserRepository(userId: $userId, isAuthenticated: $isAuthenticated)';
  }
}

Ahora en DevTools, verás:

UserRepository(userId: user123, isAuthenticated: true)

Consejos para Buenas Implementaciones de toString()

  • Incluye estado clave - Muestra las propiedades más importantes que te ayudan a entender el estado actual del objeto
  • Mantenlo conciso - Strings largos son difíciles de leer en la tabla. Limítate a la información esencial
  • Usa nombres descriptivos - Haz obvio qué representa cada valor
  • Incluye estados enum - Si tu objeto tiene estados o modos, inclúyelos

Ejemplo para un reproductor de medios:

dart
class PlayerManager {
  bool isPlaying;
  String? currentTrack;
  Duration position;
  Duration duration;

  @override
  String toString() {
    final posStr = '${position.inMinutes}:${(position.inSeconds % 60).toString().padLeft(2, '0')}';
    final durStr = '${duration.inMinutes}:${(duration.inSeconds % 60).toString().padLeft(2, '0')}';

    return 'PlayerManager('
        'playing: $isPlaying, '
        'track: ${currentTrack ?? 'none'}, '
        'position: $posStr/$durStr'
        ')';
  }
}

Esto muestra: PlayerManager(playing: true, track: My Song, position: 2:34/4:15)


Refrescando la Vista

  • Con eventos de depuración habilitados: La vista se actualiza automáticamente cuando los registros cambian
  • Sin eventos de depuración: Haz clic en el botón Refresh en la extensión para actualizar manualmente la vista
  • Refresco manual: Siempre puedes hacer clic en Refresh para asegurar que estás viendo el estado más reciente

Solución de Problemas

La pestaña get_it no aparece

  • ➜ Asegúrate de estar usando DevTools basado en navegador, no DevTools embebido en IDE
  • ➜ Verifica que la extensión esté habilitada en el menú Extensions (ícono de pieza de rompecabezas)
  • ➜ Asegura que tu app esté ejecutándose en modo debug

La extensión no muestra registros

  • ➜ Asegúrate de haber registrado objetos realmente en tu app
  • ➜ Haz clic en el botón Refresh para actualizar manualmente la vista
  • ➜ Verifica que estés viendo la instancia correcta de DevTools para tu app en ejecución

La extensión no se auto-actualiza

  • ➜ Verifica que debugEventsEnabled = true esté establecido antes de cualquier registro
  • ➜ Usa el botón Refresh manual si las actualizaciones automáticas no funcionan

Casos de Uso

Durante el Desarrollo

  • Verificar registros - Asegura que todos los servicios requeridos están registrados al inicio
  • Depurar inicialización - Verifica qué async singletons están ready
  • Inspeccionar estado - Ve el estado actual de tus servicios y modelos
  • Entender scopes - Ve qué objetos pertenecen a qué scope

Durante las Pruebas

  • Verificar configuración de prueba - Asegura que los mocks están registrados correctamente
  • Depurar pruebas inestables - Verifica si los objetos se están creando múltiples veces
  • Aislamiento de scope - Verifica que los scopes de prueba funcionan como se espera

Durante la Depuración

  • Rastrear bugs - Inspecciona el estado del servicio cuando ocurren bugs
  • Verificar ciclo de vida - Verifica si los lazy singletons se crean cuando se espera
  • Monitorear cambios - Observa cómo cambian los registros mientras navegas tu app

Aprende Más

Publicado bajo la Licencia MIT.