ডিবাগের মধ্যে কীভাবে ফ্লটার অ্যাপ্লিকেশন চলছে তা যাচাই করবেন?


95

আমার একটি ছোট প্রশ্ন আছে। অ্যাপটি ডিবাগ মোডে থাকা অবস্থায় আমি ফ্লটারে কোড কার্যকর করার একটি উপায় অনুসন্ধান করছি। কি এলোমেলো সম্ভব? আমি নথির কোথাও এটি খুঁজে পাচ্ছি না।

এটার মতো কিছু

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

ডিবাগ বা রিলিজ মোডে ফ্লটারের অ্যাপ্লিকেশন চলছে কিনা তা কীভাবে পরীক্ষা করবেন?



4
আমি দাবি (()) মুদ্রণ ("ডিবাগ মোড"); চেষ্টা করে সত্যে ফিরে আসি;}); তবে এটি আমাকে একটি ত্রুটি দেয় যা সংকলন করতে পারে না। তারা পোস্টটিতে পরে যে "প্রোফাইল" সম্পর্কে কথা বলছেন তা আমার পক্ষে খুব একটা বোঝায় না। আপনি কীভাবে এটি ব্যবহার করবেন তা দয়া করে ব্যাখ্যা করতে পারেন?
কেভিন ওয়াল্টার

উত্তর:


26

এটি কাজ করার সময় ধ্রুবকগুলি ব্যবহার করে kReleaseModeবা kDebugModeপছন্দনীয়। দেখুন Rémi এর উত্তর একটি পূর্ণ ব্যাখ্যা, যা সম্ভবত গৃহীত প্রশ্ন হওয়া উচিত জন্য নিচে।


সবচেয়ে সহজ উপায় হ'ল assertএটি কেবল ডিবাগ মোডে চলায় এটি ব্যবহার করা।

এখানে ফ্লার্টারের নেভিগেটর উত্স কোডের একটি উদাহরণ রয়েছে:

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;
}());

()কলটির শেষে বিশেষত দ্রষ্টব্য - দাবী কেবলমাত্র একটি বুলিয়ান নিয়ে কাজ করতে পারে, সুতরাং কেবল কোনও ফাংশনে পাস করা কাজ করে না।


4
"বিশেষত দ্রষ্টব্য" সেই অংশটি ছিল যেটি আমার আইডিই থেকে বেরিয়ে আসছিল। তোমাকে অনেক ধন্যবাদ!
কেভিন ওয়াল্টার

4
আপনি যখন লিখবেন () { .... }আপনি ফাংশনটি সংজ্ঞায়িত করছেন, তবে এটি কল করছেন না। ()আসলে যুক্ত করে ফাংশন কল।
rmtmckenzie

257

প্রযুক্তিগতভাবে কাজ করার জন্য দৃser়ভাবে দাবি করার সময়, আপনার সেগুলি ব্যবহার করা উচিত নয়।

পরিবর্তে, kReleaseModeথেকে ধ্রুবকটি ব্যবহার করুনpackage:flutter/foundation.dart


পার্থক্য হ'ল গাছ কাঁপানো সম্পর্কে

গাছের কাঁপুন (অব্যবহৃত কোড অপসারণকারী সংকলক) পরিবর্তনশীল ধ্রুবকগুলির উপর নির্ভর করে।

ইস্যু, দাবি আমাদের নেই isInReleaseModeবুলিয়ান না একটি ধ্রুবক। সুতরাং আমাদের অ্যাপ্লিকেশন শিপিংয়ের সময়, ডিভ এবং প্রকাশের কোড উভয়ই অন্তর্ভুক্ত।

অন্যদিকে, kReleaseMode হয় একটি ধ্রুবক। সুতরাং সংকলক সঠিকভাবে অব্যবহৃত কোড অপসারণ করতে সক্ষম, এবং আমরা নিরাপদে করতে পারি:

if (kReleaseMode) {

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

27
অল্প অজানা আমদানি সহ আপনার শ্রেণীর দূষণ এড়াতে যেমন অনুসরণ করা যায় import 'package:flutter/foundation.dart' as Foundation;তবে আপনি করতে পারেনFoundation. kReleaseMode
অলিভার ডিকসন

4
রেমি ব্যাখ্যা করার জন্য ধন্যবাদ - আমি দৃsert়তার পরিবর্তে এটি বেছে নিয়েছি - ভাল স্টাফ!
ফ্রেড

4
এটি এখন পর্যন্ত কীভাবে নিচে চলেছে, এটি গ্রহণযোগ্য উত্তর হওয়া উচিত!
খালি

4
এছাড়াও রয়েছে kDebugMode
আলেকজান্ডার স্ক্ভোর্টসভ

4
উইজেটগুলির সাথে গাছ কাঁপানোও ঘটবে? সুতরাং যদি আমি দৃশ্যমান সহ একটি ভিজিবিলিটি উইজেটটি করি: কেডেবগমোড কি সেই উইজেটটি মুক্তির বিল্ডগুলির জন্য সংকলক দ্বারা মুছে ফেলা হবে?
উইটক্যাসল

56

এই ছোট স্নিপেটগুলি আপনার যা প্রয়োজন তা করা উচিত

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

যদি না হয় আপনি আপনার আইডিই কনফিগার করতে পারেন অন্য কোনও main.dartডিবাগ মোডে চালু করতে যেখানে আপনি বুলিয়ান সেট করতে পারেন।


আমি এটি একটি Applicationক্লাসে স্থির হিসাবে রেখেছি যাতে আমি Application.isInDebugModeযেখানে এটি প্রয়োজন সেখানে লিখতে পারি।
টনি টর্নেডো

খুব মার্জিত, এটি আমার অ্যাপ্লিকেশনটিতে প্রয়োগ করা হয়েছে।
ভ্র্যাচলিন

53

এখানে এর একটি সহজ সমাধান:

import 'package:flutter/foundation.dart';

তাহলে আপনি kReleaseModeযেমন ব্যবহার করতে পারেন

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

20

পছন্দসই হতে হবে না, তবে ফাউন্ডেশন প্যাকেজটিতে একটি kDebugModeধ্রুবক রয়েছে ; সুতরাং:

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

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

18

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 {

}

এই preferrable শেষ হয়ে গেছে !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 {

}


1

কোন মোডে অ্যাপ্লিকেশনটি চালিত হয় তা অনুসন্ধানের জন্য এটি দুটি পদক্ষেপ

  1. পাওয়ার জন্য নিম্নলিখিত আমদানি যুক্ত করুন

    import 'package:flutter/foundation.dart' as Foundation;
    
  2. আর kReleaseModeপরীক্ষা যা মোড আবেদন চলছে

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

0

ডার্ট ডকুমেন্টেশন থেকে বের করা :

দৃser়তা কখন কাজ করে? এটি আপনি যে সরঞ্জামগুলি এবং কাঠামো ব্যবহার করছেন তার উপর নির্ভর করে:

  • ফ্লাটার ডিবাগ মোডে দৃser়তা সক্ষম করে।
  • কেবলমাত্র ডার্টদেভকের মতো ডেভলপমেন্ট-সরঞ্জামগুলি সাধারণত ডিফল্টরূপে দাবিগুলি সক্ষম করে।
  • কিছু সরঞ্জাম, যেমন ডার্ট এবং ডার্ট 2 জে, কমান্ড-লাইন পতাকাটির মাধ্যমে সমর্থনগুলি সমর্থন করে: - সক্ষম-সংস্থানসমূহ।

ইন প্রকাশনা কোড, গবেষকেরা উপেক্ষা করা হয় , এবং জাহির করা আর্গুমেন্ট মূল্যায়ন করা হয় না।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.