Tengo una breve pregunta. Estoy buscando una forma 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 comprobar si la aplicación Flutter se está ejecutando en modo de depuración o liberación?
flutter
debugging
dart
flutter-run
flutter-debug
Kevin Walter
fuente
fuente

Respuestas:
Si bien esto funciona, es preferible usar constantes
kReleaseModeokDebugMode. Consulte la respuesta de Rémi a continuación para obtener una explicación completa, que probablemente debería ser la pregunta aceptada.La forma más sencilla es utilizarlo,
assertya que solo se ejecuta en modo de depuración.Aquí hay un ejemplo del código fuente de Flutter's Navigator:
assert(() { if (navigator == null && !nullOk) { throw new FlutterError( 'Navigator operation requested with a context that does not include a Navigator.\n' 'The context used to push or pop routes from the Navigator must be that of a ' 'widget that is a descendant of a Navigator widget.' ); } return true; }());Tenga en cuenta en particular que
()al final de la llamada: assert solo puede operar en un booleano, por lo que simplemente pasar una función no funciona.fuente
() { .... }, define la función, pero no la llama. Agregar el()realmente llama a la función.Si bien afirma que técnicamente funciona, no debes usarlos.
En su lugar, use la constante
kReleaseModedepackage:flutter/foundation.dartLa diferencia se trata de sacudir árboles
La agitación de árboles (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 afirma que 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 otro lado,
kReleaseModees 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. }fuente
import 'package:flutter/foundation.dart' as Foundation;luego puede hacerloFoundation. kReleaseModekDebugModeestos pequeños fragmentos deberían hacer lo que necesitas
bool get isInDebugMode { bool inDebugMode = false; assert(inDebugMode = true); return inDebugMode; }de lo contrario, puede configurar su IDE para que inicie un
main.dartmodo de depuración diferente donde puede establecer un booleano.fuente
Applicationclase para poder escribirApplication.isInDebugModedonde lo necesito.Aquí hay una solución simple para esto:
import 'package:flutter/foundation.dart';entonces puedes usar
kReleaseModelikeif(kReleaseMode){ // is Release Mode ?? print('release mode'); } else { print('debug mode'); }fuente
No quiero ser quisquilloso, pero el paquete básico incluye una
kDebugModeconstante; Entonces :import 'package:flutter/foundation.dart' as Foundation; if(Foundation.kDebugMode) { print("App in debug mode"); }fuente
kDebugModeAhora puede 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
!kReleaseModeya que también verifica el modo de perfil, es decir,kDebugModesignifica que no está en modo de liberación y no en modo de perfil .kReleaseModeSi solo desea verificar el modo de liberación 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 { }kProfileModeSi solo desea verificar el modo de perfil y no el modo de liberación, puede usar
kProfileModeen su lugar: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 { }fuente
Estos son los dos pasos para averiguar en qué modo se ejecuta la aplicación
Agregue las siguientes importaciones para obtener
import 'package:flutter/foundation.dart' as Foundation;Y
kReleaseModeverifique en qué modo se está ejecutando la aplicaciónif(Foundation.kReleaseMode){ print('app release mode'); } else { print('App debug mode'); }fuente
Creo que la última forma de hacer esto es:
const bool prod = const bool.fromEnvironment('dart.vm.product');src
fuente
Extraído de la documentación de Dart :
fuente