Saya punya pertanyaan singkat. Saya mencari cara untuk mengeksekusi kode di Flutter saat aplikasi dalam mode Debug. Apakah itu mungkin di Flutter? Sepertinya saya tidak dapat menemukannya di mana pun dalam dokumentasi.
Sesuatu seperti ini
If(app.inDebugMode) {
print("Print only in debug mode");
}
Bagaimana cara memeriksa apakah aplikasi flutter berjalan dalam mode debug atau rilis?
flutter
debugging
dart
flutter-run
flutter-debug
Kevin Walter
sumber
sumber
Jawaban:
Saat ini berfungsi, menggunakan konstanta
kReleaseMode
ataukDebugMode
lebih disukai. Lihat jawaban Rémi di bawah untuk penjelasan lengkap, yang mungkin merupakan pertanyaan yang diterima.Cara termudah adalah menggunakannya
assert
karena ini hanya berjalan dalam mode debug.Berikut adalah contoh dari kode sumber Navigator Flutter:
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; }());
Perhatikan khususnya
()
di akhir panggilan - assert hanya dapat beroperasi pada boolean, jadi hanya meneruskan fungsi tidak akan berfungsi.sumber
() { .... }
Anda sedang mendefinisikan fungsi, tetapi tidak memanggilnya. Menambahkan fungsi()
sebenarnya memanggil.Meskipun asserts secara teknis berfungsi, Anda sebaiknya tidak menggunakannya.
Sebagai gantinya, gunakan konstanta
kReleaseMode
daripackage:flutter/foundation.dart
Perbedaannya adalah tentang goyangan pohon
Goyangan pohon (alias kompiler yang menghapus kode yang tidak digunakan) bergantung pada variabel yang menjadi konstanta.
Masalahnya adalah, dengan menegaskan
isInReleaseMode
boolean kita bukanlah sebuah konstanta. Jadi, saat mengirimkan aplikasi kita, kode pengembang dan rilis disertakan.Di sisi lain,
kReleaseMode
adalah konstanta. Oleh karena itu kompilator dapat dengan benar menghapus kode yang tidak digunakan, dan kita dapat dengan aman melakukan:if (kReleaseMode) { } else { // Will be tree-shaked on release builds. }
sumber
import 'package:flutter/foundation.dart' as Foundation;
maka Anda dapat melakukannyaFoundation. kReleaseMode
kDebugMode
cuplikan kecil ini harus melakukan apa yang Anda butuhkan
bool get isInDebugMode { bool inDebugMode = false; assert(inDebugMode = true); return inDebugMode; }
jika tidak, Anda dapat mengonfigurasi IDE untuk meluncurkan
main.dart
mode debug lain di mana Anda dapat menyetel boolean.sumber
Application
kelas sehingga saya bisa menulis diApplication.isInDebugMode
mana saya membutuhkannya.Berikut adalah solusi sederhana untuk ini:
import 'package:flutter/foundation.dart';
maka Anda dapat menggunakan
kReleaseMode
sukaif(kReleaseMode){ // is Release Mode ?? print('release mode'); } else { print('debug mode'); }
sumber
Bukan untuk pilih-pilih, tetapi paket fondasi mencakup
kDebugMode
konstanta; Jadi:import 'package:flutter/foundation.dart' as Foundation; if(Foundation.kDebugMode) { print("App in debug mode"); }
sumber
kDebugMode
Sekarang Anda dapat menggunakan
kDebugMode
konstanta .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 { }
Ini lebih disukai
!kReleaseMode
karena ia juga memeriksa mode profil,kDebugMode
artinya tidak dalam mode rilis dan tidak dalam mode profil .kReleaseMode
Jika Anda hanya ingin memeriksa mode rilis dan bukan mode profil, Anda dapat menggunakan
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
Jika Anda hanya ingin memeriksa mode profil dan bukan mode rilis, Anda dapat menggunakan
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 { }
sumber
Ini adalah dua langkah untuk mengetahui dalam mode mana aplikasi dijalankan
Tambahkan impor berikut untuk mendapatkan
import 'package:flutter/foundation.dart' as Foundation;
Dan
kReleaseMode
periksa mode aplikasi mana yang sedang berjalanif(Foundation.kReleaseMode){ print('app release mode'); } else { print('App debug mode'); }
sumber
Saya yakin cara terbaru untuk melakukan ini adalah:
const bool prod = const bool.fromEnvironment('dart.vm.product');
src
sumber
Diambil dari Dokumentasi Dart :
sumber