[flutter] flutter 애플리케이션이 디버그에서 실행 중인지 확인하는 방법은 무엇입니까?

짧은 질문이 있습니다. 앱이 디버그 모드 일 때 Flutter에서 코드를 실행하는 방법을 찾고 있습니다. Flutter에서 가능합니까? 문서 어디에서도 찾을 수없는 것 같습니다.

이 같은

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

Flutter 애플리케이션이 디버그 또는 릴리스 모드에서 실행 중인지 확인하는 방법은 무엇입니까?



답변


이것이 작동하는 동안 상수 kReleaseMode또는 사용하는 kDebugMode것이 좋습니다. 전체 설명은 아래 의 Rémi의 답변을 참조하십시오 .


가장 쉬운 방법은 assert디버그 모드에서만 실행되므로 사용 하는 것입니다.

다음은 Flutter의 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;
}());

특히 ()호출이 끝날 때-assert는 부울에서만 작동 할 수 있으므로 함수를 전달하는 것만으로는 작동하지 않습니다.


답변

주장은 기술적으로 작동하지만 사용해서는 안됩니다.

대신 상수 kReleaseMode를 사용하십시오.package:flutter/foundation.dart


차이점은 나무 흔들림에 관한 것입니다.

트리 쉐이킹 (일명 사용하지 않는 코드를 제거하는 컴파일러)은 상수 인 변수에 따라 다릅니다.

문제는 우리의 isInReleaseMode부울이 상수 가 아니라는 점 입니다. 따라서 앱을 배송 할 때 개발 및 릴리스 코드가 모두 포함됩니다.

반면에, kReleaseMode 이다 상수. 따라서 컴파일러는 사용하지 않는 코드를 올바르게 제거 할 수 있으며 안전하게 수행 할 수 있습니다.

if (kReleaseMode) {

} else {
  // Will be tree-shaked on release builds.
}


답변

이 작은 스 니펫은 필요한 작업을 수행해야합니다.

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

그렇지 않은 경우 main.dart부울을 설정할 수있는 디버그 모드에서 다른 것을 시작하도록 IDE를 구성 할 수 있습니다.


답변

이에 대한 간단한 해결책은 다음과 같습니다.

import 'package:flutter/foundation.dart';

그런 다음 다음 kReleaseMode과 같이 사용할 수 있습니다.

if(kReleaseMode){ // is Release Mode ??
    print('release mode');
} else {
    print('debug mode');
}


답변

kDebugMode

이제 kDebugMode상수를 사용할 수 있습니다 .

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 {

}

이것은보다 더 낫다 끝났 !kReleaseMode또한 프로파일 모드 검사, 즉 같은 kDebugMode의미 없는에서 분리 모드 하지의 프로파일 모드 .

kReleaseMode

프로필 모드가 아닌 릴리스 모드 만 확인 하려면 다음을 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

릴리스 모드가 아닌 프로필 모드 만 확인 하려면 다음을 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 {

}


답변

까다 롭지는 않지만 기초 패키지에는 kDebugMode상수가 포함되어 있습니다 . 그래서 :

import 'package:flutter/foundation.dart' as Foundation;

if(Foundation.kDebugMode) {
   print("App in debug mode");
}


답변

다음은 애플리케이션이 실행되는 모드를 확인하는 두 단계입니다.

  1. 가져 오기를 위해 다음 가져 오기를 추가하십시오.

    import 'package:flutter/foundation.dart' as Foundation;
    
  2. 그리고 kReleaseMode응용 프로그램이 실행중인 모드를 확인하십시오.

    if(Foundation.kReleaseMode){
      print('app release mode');
    } else {
      print('App debug mode');
    }