¿Cómo puedo verificar si una aplicación Flutter se está ejecutando en depuración?

Resuelto Kevin Walter asked hace 6 años • 13 respuestas

Estoy buscando una manera de ejecutar código en Flutter cuando la aplicación está en modo de depuración. ¿Es eso posible en Flutter? Parece que no puedo encontrarlo en ninguna parte de la documentación.

Algo como esto

If(app.inDebugMode) {
   print("Print only in debug mode");
}

¿Cómo puedo verificar si la aplicación Flutter se está ejecutando en modo de depuración o lanzamiento?

Kevin Walter avatar Apr 07 '18 18:04 Kevin Walter
Aceptado

En versiones posteriores, puede utilizar kDebugMode:

if (kDebugMode)
  doSomething();

Si bien las afirmaciones pueden usarse técnicamente para crear manualmente una variable de "modo de depuración", debes evitarlo.

En su lugar, utilice la constante kReleaseModedepackage:flutter/foundation.dart


La diferencia radica en la sacudida de los árboles.

La sacudida del árbol (también conocida como el compilador que elimina el código no utilizado) depende de que las variables sean constantes.

El problema es que con afirmaciones nuestro isInReleaseModebooleano no es una constante. Entonces, al enviar nuestra aplicación, se incluyen tanto el código de desarrollo como el de lanzamiento.

Por otra parte, kReleaseMode es una constante. Por lo tanto, el compilador puede eliminar correctamente el código no utilizado y podemos hacer con seguridad:

if (kReleaseMode) {

} else {
  // Will be tree-shaked on release builds.
}
Rémi Rousselet avatar Apr 10 '2019 12:04 Rémi Rousselet

Aquí hay una solución simple para esto:

import 'package:flutter/foundation.dart';

Entonces puedes usar kReleaseModecomo

if(kReleaseMode){ // Is Release Mode??
    print('release mode');
} else {
    print('debug mode');
}
Kalpesh Kundanani avatar Apr 10 '2019 08:04 Kalpesh Kundanani

kDebugMode

Ahora puedes usar la kDebugModeconstante .

if (kDebugMode) {
  // Code here will only be included in debug mode.
  // As kDebugMode is a constant, the tree shaker
  // will remove the code entirely from compiled code.
} else {

}

Esto es preferible !kReleaseModea que también verifique el modo de perfil, es decir, kDebugModesignifica que no está en modo de lanzamiento ni en modo de perfil .

kReleaseMode

Si solo desea verificar el modo de lanzamiento y no el modo de perfil, puede usar kReleaseModeen su lugar:

if (kReleaseMode) {
  // Code here will only be run in release mode.
  // As kReleaseMode is a constant, the tree shaker
  // will remove the code entirely from other builds.
} else {

}

kProfileMode

Si solo desea verificar el modo de perfil y no el modo de lanzamiento, puede usar kProfileMode:

if (kProfileMode) {
  // Code here will only be run in release mode.
  // As kProfileMode is a constant, the tree shaker
  // will remove the code entirely from other builds.
} else {

}
creativecreatorormaybenot avatar Jun 21 '2020 18:06 creativecreatorormaybenot

Utilice la respuesta de Remi con kReleaseModeyo kDebugModeLa compilación de Dart no podrá sacudir su código.


Este pequeño fragmento debería hacer lo que necesitas:

bool get isInDebugMode {
  bool inDebugMode = false;
  assert(inDebugMode = true);
  return inDebugMode;
}

De lo contrario, puede configurar su IDE para iniciar un main.dartmodo de depuración diferente donde puede configurar un valor booleano.

Hadrien Lejard avatar Apr 07 '2018 15:04 Hadrien Lejard