짧은 질문이 있습니다. 앱이 디버그 모드 일 때 Flutter에서 코드를 실행하는 방법을 찾고 있습니다. Flutter에서 가능합니까? 문서 어디에서도 찾을 수없는 것 같습니다.
이 같은
If(app.inDebugMode) {
print("Print only in debug mode");
}
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.
}
import 'package:flutter/foundation.dart' as Foundation;
당신이 할 수있는 다음Foundation. kReleaseMode
kDebugMode
이 작은 스 니펫은 필요한 작업을 수행해야합니다.
bool get isInDebugMode {
bool inDebugMode = false;
assert(inDebugMode = true);
return inDebugMode;
}
그렇지 않은 경우 main.dart
부울을 설정할 수있는 디버그 모드에서 다른 것을 시작하도록 IDE를 구성 할 수 있습니다.
Application
쓸 수 있도록 클래스에 정적으로 넣었 Application.isInDebugMode
습니다.
이에 대한 간단한 해결책은 다음과 같습니다.
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 {
}
다음은 애플리케이션이 실행되는 모드를 확인하는 두 단계입니다.
가져 오기를 위해 다음 가져 오기를 추가하십시오.
import 'package:flutter/foundation.dart' as Foundation;
그리고 kReleaseMode
응용 프로그램이 실행중인 모드를 확인하십시오.
if(Foundation.kReleaseMode){
print('app release mode');
} else {
print('App debug mode');
}