Eu tenho uma pergunta curta. Estou procurando uma maneira de executar código no Flutter quando o aplicativo está no modo de depuração. Isso é possível no Flutter? Não consigo encontrar em nenhum lugar da documentação.
Algo assim
If(app.inDebugMode) {
print("Print only in debug mode");
}
Como verificar se o aplicativo flutter está sendo executado no modo de depuração ou liberação?
flutter
debugging
dart
flutter-run
flutter-debug
Kevin Walter
fonte
fonte
Respostas:
Enquanto isso funciona, usar constantes
kReleaseMode
oukDebugMode
é preferível. Veja a resposta de Rémi abaixo para uma explicação completa, que provavelmente deve ser a pergunta aceita.A maneira mais fácil é usar
assert
, pois só funciona no modo de depuração.Aqui está um exemplo do código-fonte do 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; }());
Observe em particular o
()
no final da chamada - assert só pode operar em um booleano, portanto, apenas passar uma função não funciona.fonte
() { .... }
você define a função, mas não a chama. Adicionar o()
realmente chama a função.Embora asserts funcione tecnicamente, você não deve usá-los.
Em vez disso, use a constante
kReleaseMode
depackage:flutter/foundation.dart
A diferença está no tremor das árvores
A agitação da árvore (também conhecida como o compilador removendo o código não utilizado) depende das variáveis serem constantes.
O problema é que, com afirma, nosso
isInReleaseMode
booleano não é uma constante. Portanto, ao enviar nosso aplicativo, o código de desenvolvimento e o código de lançamento são incluídos.Por outro lado,
kReleaseMode
é uma constante. Portanto, o compilador é capaz de remover corretamente o código não utilizado, e podemos fazer com segurança:if (kReleaseMode) { } else { // Will be tree-shaked on release builds. }
fonte
import 'package:flutter/foundation.dart' as Foundation;
, você pode fazerFoundation. kReleaseMode
kDebugMode
esses pequenos trechos devem fazer o que você precisa
bool get isInDebugMode { bool inDebugMode = false; assert(inDebugMode = true); return inDebugMode; }
caso contrário, você pode configurar seu IDE para lançar um diferente
main.dart
no modo de depuração, onde você pode definir um booleano.fonte
Application
classe para poder escreverApplication.isInDebugMode
onde preciso.Aqui está uma solução simples para isso:
import 'package:flutter/foundation.dart';
então você pode usar
kReleaseMode
comoif(kReleaseMode){ // is Release Mode ?? print('release mode'); } else { print('debug mode'); }
fonte
kDebugMode
Agora você pode usar a
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 { }
Isso é preferível
!kReleaseMode
, pois também verifica o modo de perfil, ou seja,kDebugMode
significa não no modo de liberação e não no modo de perfil .kReleaseMode
Se você deseja apenas verificar o modo de liberação e não o modo de perfil, pode usar
kReleaseMode
: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
Se você deseja apenas verificar o modo de perfil e não o modo de liberação, pode 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 { }
fonte
Não seja exigente, mas o pacote básico inclui uma
kDebugMode
constante; Então :import 'package:flutter/foundation.dart' as Foundation; if(Foundation.kDebugMode) { print("App in debug mode"); }
fonte
Estas são as duas etapas para descobrir em qual modo o aplicativo é executado
Adicione as seguintes importações para obter
import 'package:flutter/foundation.dart' as Foundation;
E
kReleaseMode
verifique em qual modo o aplicativo está rodandoif(Foundation.kReleaseMode){ print('app release mode'); } else { print('App debug mode'); }
fonte
Acredito que a maneira mais recente de fazer isso é:
const bool prod = const bool.fromEnvironment('dart.vm.product');
src
fonte
Extraído da documentação do Dart :
fonte