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
kReleaseMode
okDebugMode
. 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,
assert
ya 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
kReleaseMode
depackage:flutter/foundation.dart
La 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
isInReleaseMode
booleano 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,
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. }
fuente
import 'package:flutter/foundation.dart' as Foundation;
luego puede hacerloFoundation. kReleaseMode
kDebugMode
estos 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.dart
modo de depuración diferente donde puede establecer un booleano.fuente
Application
clase para poder escribirApplication.isInDebugMode
donde lo necesito.Aquí hay una solución simple para esto:
import 'package:flutter/foundation.dart';
entonces puedes usar
kReleaseMode
likeif(kReleaseMode){ // is Release Mode ?? print('release mode'); } else { print('debug mode'); }
fuente
No quiero ser quisquilloso, pero el paquete básico incluye una
kDebugMode
constante; Entonces :import 'package:flutter/foundation.dart' as Foundation; if(Foundation.kDebugMode) { print("App in debug mode"); }
fuente
kDebugMode
Ahora puede usar la
kDebugMode
constante .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
!kReleaseMode
ya que también verifica el modo de perfil, es decir,kDebugMode
significa que no está en modo de liberación y no en modo de perfil .kReleaseMode
Si solo desea verificar el modo de liberación y no el modo de perfil, puede usar
kReleaseMode
en 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 liberación, puede usar
kProfileMode
en 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
kReleaseMode
verifique 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