ঝাঁকুনিতে রাষ্ট্রীয় এবং রাষ্ট্রবিহীন উইজেটের মধ্যে কী সম্পর্ক?


105

একটি রাষ্ট্রীয় উইজেটকে কোনও উইজেট হিসাবে সংজ্ঞায়িত করা হয় যা তার জীবনকালের মধ্যে তার রাজ্যকে পরিবর্তন করে। কিন্তু এটি একটি খুব সাধারণ চর্চা একটি জন্য StatelessWidgetএকটি আছে StatefulWidgetতার শিশুদের একজন হিসেবে। StatelessWidgetএটির কোনও StatefulWidgetসন্তানের মতো হলে রাষ্ট্রীয় হয়ে উঠবে না ?

আমি কোড অংশ হিসেবে ডকুমেন্টেশন মধ্যে খুঁজছেন চেষ্টা StatelessWidget, কিন্তু জিনিসটা করতে পারেনি কিভাবে StatelessWidgetথাকতে পারে Statefulwidgetতার সন্তানদের এবং এখনও থাকা StatelessWidget

ঝাঁকুনির মধ্যে রাষ্ট্রীয় এবং রাষ্ট্রবিহীন উইজেটের মধ্যে সম্পর্ক এবং পার্থক্য কী?


4
আপনি বিভিন্ন ধরণের উইজেট থেকে আপনার বিন্যাসটি রচনা করতে পারেন, তবে এর অর্থ এই নয় যে আপনি প্রতিটি উইজেটকে প্রভাবিত করতে রচনাটির বৈশিষ্ট্যগুলি উত্তরাধিকার সূত্রে গ্রহণ করছেন। আমার অর্থ হ'ল আপনার কাছে এমন একটি কন্টেইনার থাকতে পারে যা রাজ্যহীন এবং অন্য কোনও ধারকটির সন্তানের রয়েছে যা অন্য কোথাও স্টেটফুল উইজেট হিসাবে ঘোষিত হয়েছে, ধারকটির অবস্থা কেবলমাত্র এই উপাদানটিকে প্রভাবিত করবে। সুতরাং, এটি বিভিন্ন ধরণের উইজেটগুলির একটি রচনা থাকা সম্পর্কে, প্রতিটি ফাংশন আপনার যেমন প্রয়োজন তেমন প্রয়োজন।
আজিজা

4
জগাখিচুড়ি জিনিষ আরও বেশি করতে, উইজেট এর 3 য় টাইপ আছে: InheritedWidget; যা StatelessWidgetআপডেট করতে পারে ।
রামি রুসলেট

উত্তর:


103

একটি স্টেটলেস উইজেট কখনও নিজের দ্বারা পুনর্নির্মাণ করতে পারে না (তবে বাহ্যিক ইভেন্টগুলি থেকে পারে)। একটি স্টেটফুল উইজেট পারে। এটাই সোনার নিয়ম।

তবে যে কোনও ধরণের উইজেট যে কোনও সময় পুনরায় রঙ করা যায়

স্টেটলেস কেবল তার অর্থ এটির সমস্ত সম্পত্তি অপরিবর্তনীয় এবং তাদের পরিবর্তনের একমাত্র উপায় হ'ল সেই উইজেটের একটি নতুন উদাহরণ তৈরি করা। এটি যেমন উইজেট গাছ লক করে না।

তবে আপনার বাচ্চাদের কী ধরণের তা নিয়ে আপনার যত্ন নেওয়া উচিত নয়। এটি আপনার উপর কোনও প্রভাব ফেলবে না।


11
(কাঠামোর তুলনামূলকভাবে নতুন)। rebuildএবং repaint
ব্যবহারকারীর

এলোমেলো ফ্রেমওয়ার্ক কোডের মন্তব্যগুলি থেকেও, দৃশ্যত StateFulWidgetগুলি খুব পরিবর্তনযোগ্য imm
user462455

4
একটি উইজেটের বিল্ডিং মূলত "বিল্ড" পদ্ধতিতে কল, তারপরে সংশ্লিষ্ট রেন্ডারবক্স তৈরি / আপডেট করে; যা পেইন্টিং প্রক্রিয়া দ্বারা অনুসরণ করা হয়। যা স্ক্রিনে এই রেন্ডারবক্সগুলি মুদ্রণ করবে।
রামি রুসলেট

"স্টেটফুল উইজেট" উত্তরাধিকার সূত্রে প্রাপ্ত ক্লাসগুলি অপরিবর্তনীয়। তবে রাষ্ট্রটি (রাজ্য <আপনার উইজেট>) নিজেই পরিবর্তনযোগ্য।
রামি রুসলেট

4
@ রৌমিরোসলেট স্টার্টফুল এবং স্টেটলেস উইজেটগুলি উভয়ই ফ্রেমকে পুনর্নির্মাণ করে, বিড়বিড়
ম্যাট

82

স্টেটফুল উইজেট বনাম স্টেটলেস উইজেট।

এখানে চিত্র বর্ণনা লিখুন

স্টেটলেস উইজেট - এমন একটি উইজেট যার পক্ষে পরিবর্তনীয় রাষ্ট্রের প্রয়োজন হয় না।

  • স্টেটলেস উইজেট হ'ল একটি উইজেট যা ইউজার ইন্টারফেসের অংশটিকে অন্যান্য উইজেটের একটি নক্ষত্র স্থাপন করে যা ব্যবহারকারী ইন্টারফেসকে আরও দৃ concrete়তার সাথে বর্ণনা করে। ব্যবহারকারী ইন্টারফেসের বর্ণনা সম্পূর্ণরূপে কংক্রিট না হওয়া পর্যন্ত বিল্ডিং প্রক্রিয়াটি পুনরাবৃত্তভাবে চলতে থাকে (উদাহরণস্বরূপ, রেন্ডারঅবজেক্ট উইজেটগুলি সম্পূর্ণরূপে গঠিত, যা কংক্রিট রেন্ডারঅবজেক্টস বর্ণনা করে)।

  • statelessযখন ব্যবহারকারী ইন্টারফেস আপনাকে বর্ণনা অংশ বস্তুর নিজেই এবং কনফিগারেশন সংক্রান্ত তথ্য ছাড়া আর কিছু উপর নির্ভর করে না উইজেট দরকারী BuildContext যা উইজেট স্ফীত হয়। গতিশীল পরিবর্তন করতে পারে এমন রচনাগুলির জন্য, যেমন অভ্যন্তরীণ ক্লক-চালিত রাষ্ট্র থাকার কারণে বা কোনও সিস্টেমের অবস্থার উপর নির্ভর করে, ব্যবহার বিবেচনা করুন StatefulWidget

class GreenFrog extends StatelessWidget {
  const GreenFrog({ Key key }) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Container(color: const Color(0xFF2DBD3A));
  }
}

স্টেটফুল উইজেট - এমন একটি উইজেট যাতে পারস্পরিক পরিবর্তনযোগ্য অবস্থা রয়েছে।

  • আপনি বর্ণনা করছেন এমন ইউজার ইন্টারফেসের অংশটি পরিবর্তনশীলভাবে পরিবর্তন করতে পারে তখন রাষ্ট্রীয় উইজেটগুলি কার্যকর হয়।

ঝাঁকুনি যখন a StatefulWidget , এটি একটি স্টেট অবজেক্ট তৈরি করে। এই অবজেক্টটি যেখানে সেই উইজেটের জন্য সমস্ত পরিবর্তনীয় স্থিতি অনুষ্ঠিত হয়।

রাষ্ট্র ধারণা দুটি জিনিস দ্বারা সংজ্ঞায়িত:

1) উইজেট দ্বারা ব্যবহৃত ডেটা পরিবর্তন হতে পারে।

2) উইজেটটি তৈরি করা হলে ডেটা সমকালীনভাবে পড়া যায় না। (বিল্ড পদ্ধতিটি বলা হওয়ার সাথে সাথে সমস্ত রাজ্য প্রতিষ্ঠিত হতে হবে)।

স্টেটফুল উইজেট জীবনচক্র

জীবনচক্রের নিম্নলিখিত সরলীকৃত পদক্ষেপ রয়েছে:

  1. ক্রিয়েস্টেট () - যখন স্টার্টফুল উইজেট তৈরির জন্য যখন ফ্লার্টকে নির্দেশ দেওয়া হয়, তখন এটি তত্ক্ষণাত কল করে createState()
  • গাছের একটি নির্দিষ্ট স্থানে এই উইজেটের জন্য পরিবর্তনীয় অবস্থা তৈরি করে।

  • সাব-ক্লাসগুলি তাদের সম্পর্কিত রাজ্য সাবক্লাসের নতুন তৈরি হওয়া উদাহরণটি ফিরিয়ে আনতে এই পদ্ধতিটি ওভাররাইড করতে হবে:

@override
_MyState createState() => _MyState();
  1. মাউন্ট করা == সত্য - সমস্ত উইজেটের একটি বুল this.mountedসম্পত্তি রয়েছে। এটি buildContextবরাদ্দ করা হলে সত্য হয়ে যায় turns setStateউইজেটটি আনমাউন্ট করা হলে কল করা ত্রুটি । এই স্টেট অবজেক্টটি বর্তমানে কোনও গাছে রয়েছে কিনা।
  • একটি স্টেট অবজেক্ট তৈরি করার পরে এবং কল করার আগে initState, ফ্রেমওয়ার্কটি রাষ্ট্রের সাথে এটির সাথে যুক্ত করে "বস্তু" চাপায়
    BuildContext। কাঠামো
    কল না হওয়া পর্যন্ত স্টেট অবজেক্ট মাউন্ট থাকে dispose(), এর পরে ফ্রেমওয়ার্ক আর কখনও
    রাজ্য অবজেক্টটিকে পুনর্নির্মাণ করতে বলবে না ।

  • মাউন্ট করা সত্য না হলে সেট স্টেট কল করা ত্রুটি।

bool get mounted => _element != null;
  1. initState () - উইজেট তৈরি হওয়ার পরে এটি অবশ্যই প্রথম পদ্ধতি বলা হয় (অবশ্যই ক্লাস কনস্ট্রাক্টরের পরে।)

initStateএকবার এবং শুধুমাত্র একবার বলা হয়। এটা কল করতে হবেsuper.initState().

  • ডেটা সূচনা করুন যা উইজেটের তৈরি ইভেন্টের জন্য নির্দিষ্ট বিল্ডকন্টেক্সটে নির্ভর করে।

  • গাছগুলিতে এই উইজেটগুলি 'পিতামাতার' উপর নির্ভর করে এমন বৈশিষ্ট্যগুলি আরম্ভ করুন।

  • স্ট্রিম, ChangeNotifiersবা অন্য কোনও অবজেক্টের সাবস্ক্রাইব করুন যা এই উইজেটের ডেটা পরিবর্তন করতে পারে।

@override
initState() {
  super.initState();
  // Add listeners to this class
  cartItemStream.listen((data) {
    _updateWidget(data);
  });
}
  1. didChangeD dependency () - যখন এই রাজ্যের অবজেক্টের নির্ভরতা পরিবর্তিত হয় তখনই ডাকা হয়।
  • এই পদ্ধতিটি সঙ্গে সঙ্গে বলা হয় initStateBuildContext.inheritFromWidgetOfExactTypeএই পদ্ধতি থেকে কল করা নিরাপদ ।

  • সাবক্লাসগুলি খুব কমই এই পদ্ধতিটিকে ওভাররাইড করে কারণ ফ্রেমওয়ার্ক সর্বদা নির্ভরতা পরিবর্তনের পরে বিল্ডকে কল করে। কিছু উপশ্রেণী এই পদ্ধতিটিকে ওভাররাইড করে কারণ তাদের নির্ভরতা পরিবর্তিত হলে তাদের কিছু ব্যয়বহুল কাজ করা উচিত (যেমন, নেটওয়ার্ক আনতে) এবং সেই কাজটি প্রতিটি বিল্ডের জন্য করা ব্যয়বহুল হবে।

@protected
@mustCallSuper
void didChangeDependencies() { }
  1. বিল্ড () - উইজেট দ্বারা প্রতিনিধিত্ব করা ব্যবহারকারী ইন্টারফেসের অংশ বর্ণনা করে।

কাঠামোটি বিভিন্ন পদ্ধতিতে এই পদ্ধতিটিকে কল করে:

  • ফোন করার পরে initState
  • ফোন করার পরে didUpdateWidget
  • একটি কল পাওয়ার পরে setState
  • এই রাজ্য অবজেক্টের নির্ভরতার পরে (উদাহরণস্বরূপ, পূর্ববর্তী বিল্ড পরিবর্তনের দ্বারা উল্লিখিত একটি উত্তরাধিকারী উইজেট)।
  • নিষ্ক্রিয় কল করার পরে এবং তারপরে অন্য কোনও স্থানে স্টেট অবজেক্টটিকে গাছের মধ্যে পুনরায় প্রবেশের পরে।
  • কাঠামোটি এই পদ্ধতিতে ফিরে আসা উইজেটের সাথে এই উইজেটের নীচে সাবট্রিকে প্রতিস্থাপন করে, হয় বিদ্যমান সাবট্রিকে আপডেট করে অথবা সাবট্রিটি সরিয়ে এবং নতুন সাবট্রি স্ফীত করে, এই পদ্ধতিতে ফিরে আসা উইজেটটি বিদ্যমান সাবট্রির মূল আপডেট করতে পারে কিনা তার উপর নির্ভর করে কল হিসাবে নির্ধারিত Widget.canUpdate

  • সাধারণত বাস্তবায়নগুলি এই উইজেটের নির্মাতা , প্রদত্ত বিল্ডকন্টেক্সট এবং এই স্টেট অবজেক্টের অভ্যন্তরীণ অবস্থার তথ্য দিয়ে কনফিগার করা উইজেটগুলির একটি নতুন তৈরি নক্ষত্রকে ফিরিয়ে দেয় ।

@override
  Widget build(BuildContext context, MyButtonState state) {
    ... () { print("color: $color"); } ...
  }
  1. didUpdateWidget () - উইজেট কনফিগারেশন পরিবর্তন যখনই বলা হয়।
  • যদি প্যারেন্ট উইজেটটি পুনর্নির্মাণ করে এবং অনুরূপ রানটাইম টাইপ এবং উইজেট.কি সহ নতুন উইজেট প্রদর্শন করার জন্য ট্রি আপডেটে এই অবস্থানটি অনুরোধ করে, তবে ফ্রেমওয়ার্কটি নতুন উইজেটের উল্লেখ করার জন্য এই স্টেট অবজেক্টের উইজেট সম্পত্তি আপডেট করবে এবং তারপরে এটিকে কল করবে আর্গুমেন্ট হিসাবে পূর্ববর্তী উইজেট সহ পদ্ধতি।

  • উইজেট পরিবর্তন হলে (যেমন, অন্তর্নিহিত অ্যানিমেশনগুলি শুরু করতে) প্রতিক্রিয়া জানাতে এই পদ্ধতিটি ওভাররাইড করুন।

  • ফ্রেমওয়ার্কটি সর্বদা ডু ইউপডেট উইজেট কল করার পরে বিল্ড কল করে, যার অর্থ ডিডউপডেট উইজেটে সেটস্টেটের কোনও কল রিডানড্যান্ট।

@mustCallSuper
@protected
void didUpdateWidget(covariant T oldWidget) { }
  1. সেটস্টেট () - আপনি যখনই কোনও স্টেট অবজেক্টের অভ্যন্তরীণ স্থিতি পরিবর্তন করেন, এমন কোনও ফাংশনে পরিবর্তন করুন যা আপনি পাস করেছেন setState:
  • কল স্টেট স্টেট ফ্রেমওয়ার্কটি সূচিত করে যে এই অবজেক্টের অভ্যন্তরীণ পরিস্থিতি এমন উপায়ে পরিবর্তিত হয়েছে যা এই সাবট্রির ব্যবহারকারীর ইন্টারফেসকে প্রভাবিত করতে পারে, যার ফলে ফ্রেমওয়ার্কটি
    এই স্টেট অবজেক্টের জন্য কোনও বিল্ড নির্ধারিত করে ।

  • আপনি যদি কেবল সেটস্টেটকে কল না করে সরাসরি রাজ্যটি পরিবর্তন করেন তবে ফ্রেমওয়ার্কটি কোনও বিল্ড নির্ধারিত করতে পারে না এবং এই সাবট্রির জন্য ব্যবহারকারী ইন্টারফেসটি নতুন রাষ্ট্রের প্রতিফলনের জন্য আপডেট নাও হতে পারে।

setState(() { _myState = newValue });
  1. নিষ্ক্রিয় () - গাছ থেকে স্টেট সরিয়ে ফেলা হলে নিষ্ক্রিয় বলা হয়, তবে বর্তমান ফ্রেমের পরিবর্তন শেষ হওয়ার আগে এটি পুনরায় সজ্জিত করা যেতে পারে। এই পদ্ধতিটি মূলত বিদ্যমান কারণ রাজ্য অবজেক্টগুলি গাছের এক বিন্দু থেকে অন্য বিন্দুতে স্থানান্তরিত হতে পারে।
  • কাঠামো এই পদ্ধতিটিকে কল করে যখনই এটি গাছ থেকে এই রাজ্য অবজেক্টটিকে সরিয়ে দেয়। কিছু ক্ষেত্রে, কাঠামোটি গাছের অন্য অংশে রাজ্য অবজেক্টটিকে পুনরায় সন্নিবেশ করবে (উদাহরণস্বরূপ, যদি এই রাজ্য অবজেক্টযুক্ত সাবট্রি গাছের এক স্থান থেকে অন্য স্থানে গ্রাফ করা হয়)। যদি এটি হয়, কাঠামোটি নিশ্চিত করবে যে এটি রাজ্যটির বস্তুকে গাছের মধ্যে নতুন অবস্থানে খাপ খাইয়ে নেওয়ার সুযোগ দেয় give যদি কাঠামোটি এই সাবট্রিটিকে পুনরায় সজ্জিত করে তবে এটি অ্যানিমেশন ফ্রেমের সমাপ্তির আগে এটি করবে যেখানে সাবট্রিটি গাছ থেকে সরানো হয়েছিল। এই কারণে, রাষ্ট্রীয় অবজেক্টগুলি যতক্ষণ না ফ্রেমওয়ার্ক তাদের নিষ্পত্তি পদ্ধতিটি কল না করে সর্বাধিক সংস্থানগুলি ছাড়িয়ে দিতে পারে le

এটি খুব কমই ব্যবহৃত হয়।

@protected
@mustCallSuper
void deactivate() { }
  1. নিষ্পত্তি () - যখন এই বস্তুকে স্থায়ীভাবে গাছ থেকে সরানো হয় তখন কল করা হয়।
  • ফ্রেমওয়ার্কটি এই পদ্ধতিটিকে কল করে যখন এই রাজ্য অবজেক্টটি আর কখনও তৈরি করে না। ফ্রেমওয়ার্ক কল করার পরে dispose(), রাজ্য অবজেক্টটিকে আনমাউন্ট হিসাবে বিবেচনা করা হয় এবং মাউন্ট করা সম্পত্তিটি মিথ্যা। এই স্থানে সেটস্টেট কল করা একটি ত্রুটি। জীবনচক্রের এই পর্যায়টি টার্মিনাল: নিষ্পত্তি হয়েছে এমন কোনও রাজ্য অবজেক্টকে পুনঃনির্মাণের কোনও উপায় নেই।

  • এই অবজেক্টটি ধরে রাখা কোনও সংস্থান (যেমন, কোনও সক্রিয় অ্যানিমেশনগুলি বন্ধ করুন) প্রকাশের জন্য সাবক্লাসগুলি এই পদ্ধতিটি ওভাররাইড করে।

@protected
@mustCallSuper
void dispose() {
  assert(_debugLifecycleState == _StateLifecycle.ready);
  assert(() { _debugLifecycleState = _StateLifecycle.defunct; return true; }());
}

এখানে চিত্র বর্ণনা লিখুন

আরও তথ্যের জন্য যান এখানে এখানে , এখানে


26

Flutter.io এ ডকুমেন্টেশন থেকে :

... এখানে লক্ষণীয় গুরুত্বপূর্ণ বিষয়টি মূলত স্টেটলেস এবং স্টেটফুল উইজেট একইরকম আচরণ করে। তারা প্রতিটি ফ্রেম পুনর্নির্মাণ করে, পার্থক্যটি হ'ল স্টেটফুল উইজেটের একটি স্টেট অবজেক্ট থাকে যা ফ্রেম জুড়ে স্টেটের ডেটা সংরক্ষণ করে এবং এটি পুনরুদ্ধার করে।

যদি আপনার সন্দেহ হয় তবে সর্বদা এই নিয়মটি মনে রাখবেন: যদি কোনও উইজেট পরিবর্তন হয় (ব্যবহারকারী এটির সাথে ইন্টারঅ্যাক্ট করে উদাহরণস্বরূপ) এটি রাষ্ট্রীয় ful যাইহোক, কোনও শিশু যদি পরিবর্তনের জন্য প্রতিক্রিয়া দেখায় তবে পিতামাতার পরিবর্তনে প্রতিক্রিয়া না জানালে ধারণকৃত পিতামাতারা স্টেটলেস উইজেট হতে পারে।


14

যেমন তেজস্ক্রিয় ডক্সে উল্লেখ আছে

আলোচ্য বিষয়টি কি?

কিছু উইজেট স্টেটফুল এবং কিছু স্টেটহীন। যদি কোনও উইজেট পরিবর্তন হয় — ব্যবহারকারী এটির সাথে ইন্টারঅ্যাক্ট করে for উদাহরণস্বরূপ — এটি রাষ্ট্রীয়। একটি উইজেটের রাজ্যে এমন মান রয়েছে যা স্লাইডারের বর্তমান মান বা একটি চেকবাক্স চেক করা আছে কিনা এর মতো পরিবর্তিত হতে পারে। একটি উইজেটের রাজ্য একটি স্টেট অবজেক্টে সংরক্ষণ করা হয়, যা উইজেটের রাজ্যকে তার উপস্থিতি থেকে পৃথক করে। যখন উইজেটের স্থিতি পরিবর্তন হয়, রাষ্ট্রের অবজেক্ট সেটস্টেট () কল করে, উইজেটটিকে পুনরায় আঁকতে ফ্রেমওয়ার্কটি বলে।

একটি রাষ্ট্রবিহীন উইজেট পরিচালনা করার জন্য কোনও অভ্যন্তরীণ রাষ্ট্র নেই। আইকন, আইকনবাটন এবং পাঠ্য স্টেটলেস উইজেটের উদাহরণ, যা স্টেটলেস উইজেট সাবক্লাস করে।

একটি রাষ্ট্রীয় উইজেট গতিশীল। ব্যবহারকারী একটি স্টেটফুল উইজেটের সাথে আলাপচারিতা করতে পারে (উদাহরণস্বরূপ কোনও ফর্মে টাইপ করে বা স্লাইডারটি সরিয়ে) বা এটি সময়ের সাথে সাথে পরিবর্তিত হয় (সম্ভবত কোনও ডেটা ফিডই ইউআইকে আপডেট করার কারণ হতে পারে)। চেকবাক্স, রেডিও, স্লাইডার, ইনকওয়েল, ফর্ম এবং টেক্সটফিল্ড স্টেটফুল উইজেটের উদাহরণ, যা স্টেটফুল উইজেট সাবক্লাস করে।

https://flutter.io/tutorials/interactive/#stateful-stateless


10

রাজ্য হ'ল এমন তথ্য যা (1) উইজেটটি তৈরি করা হয় এবং (2) উইজেটের জীবদ্দশায় পরিবর্তিত হতে পারে sy স্টেট.সেটস্টেট ব্যবহার করে যখন এই জাতীয় রাজ্য পরিবর্তন হয় তখন রাষ্ট্রকে তাত্ক্ষণিকভাবে অবহিত করা হয় তা নিশ্চিত করা উইজেট বাস্তবায়নকারীদের দায়িত্ব is

স্টেটফুল উইজেট :

স্টেটফুল উইজেট এমন একটি উইজেট যা ইউজার ইন্টারফেসের অংশটিকে অন্যান্য উইজেটের একটি নক্ষত্র স্থাপন করে যা ইউজার ইন্টারফেসকে আরও দৃ concrete়তার সাথে বর্ণনা করে। ব্যবহারকারী ইন্টারফেসের বর্ণনা সম্পূর্ণরূপে কংক্রিট না হওয়া পর্যন্ত বিল্ডিং প্রক্রিয়াটি পুনরাবৃত্তভাবে চলতে থাকে (উদাহরণস্বরূপ, রেন্ডারঅবজেক্ট উইজেটগুলি সম্পূর্ণরূপে গঠিত, যা কংক্রিট রেন্ডারঅবজেক্টস বর্ণনা করে)।

আপনি বর্ণনা করছেন এমন ইউজার ইন্টারফেসের অংশটি পরিবর্তনশীলভাবে পরিবর্তিত হতে পারে, উদাহরণস্বরূপ অভ্যন্তরীণ ক্লক-চালিত রাষ্ট্র থাকার কারণে বা কোনও সিস্টেমের অবস্থার উপর নির্ভর করে যখন স্টেটল উইজেট কার্যকর হয়। কম্পোজিশনের জন্য যা কেবলমাত্র অবজেক্টের কনফিগারেশন তথ্যের উপর নির্ভর করে এবং বিল্ডকন্টেক্সট যেখানে উইজেট স্ফীত হয়, স্টেটলেস উইজেট ব্যবহার বিবেচনা করুন।

স্টেটফুল উইজেট উদাহরণগুলি নিজেরাই অপরিবর্তনীয় এবং তাদের পরিবর্তনযোগ্য স্থিতি পৃথক স্টেট অবজেক্টগুলিতে সংরক্ষণ করে যা স্ট্রেটস্টেট পদ্ধতি দ্বারা তৈরি করা হয়, বা যে স্টেট সাবস্ক্রাইব করে এমন বস্তুগুলিতে, উদাহরণস্বরূপ স্ট্রিম বা চেঞ্জনোটাইফায়ার অবজেক্টগুলিতে, যা স্টেটফুল উইজেটে চূড়ান্ত ক্ষেত্রগুলিতে রেফারেন্সগুলি সংরক্ষণ করা হয় নিজেই

স্টেটলেস উইজেট :

স্টেটলেস উইজেট হ'ল একটি উইজেট যা ইউজার ইন্টারফেসের অংশটিকে অন্যান্য উইজেটের একটি নক্ষত্র স্থাপন করে যা ব্যবহারকারী ইন্টারফেসকে আরও দৃ concrete়তার সাথে বর্ণনা করে। ব্যবহারকারী ইন্টারফেসের বর্ণনা সম্পূর্ণরূপে কংক্রিট না হওয়া পর্যন্ত বিল্ডিং প্রক্রিয়াটি পুনরাবৃত্তভাবে চলতে থাকে (উদাহরণস্বরূপ, রেন্ডারঅবজেক্ট উইজেটগুলি সম্পূর্ণরূপে গঠিত, যা কংক্রিট রেন্ডারঅবজেক্টস বর্ণনা করে)।

স্টেটলেস উইজেট কার্যকর যখন আপনি বর্ণনা করছেন এমন ইউজার ইন্টারফেসের অংশটি অবজেক্টের নিজস্ব কনফিগারেশন তথ্য এবং বিল্ডকন্টেক্সট ব্যতীত অন্য কোনও কিছুর উপর নির্ভর করে না যেখানে উইজেটটি স্ফীত হয়। গতিশীল পরিবর্তন করতে পারে এমন রচনাগুলির জন্য, যেমন অভ্যন্তরীণ ক্লক-চালিত রাষ্ট্র থাকার কারণে বা কোনও সিস্টেমের অবস্থার উপর নির্ভর করে স্টেটফুল উইজেট ব্যবহার বিবেচনা করুন।


9

স্টেটলেস উইজেটস স্ট্যাটিক উইজেটস। স্টেটলেস উইজেটগুলি শুরু করার আগে আপনাকে কয়েকটি সম্পত্তি পাস করতে হবে। এগুলি কোনও ডেটা পরিবর্তন বা কোনও আচরণ পরিবর্তনের উপর নির্ভর করে না। উদাহরণ স্বরূপ. পাঠ্য, আইকন, রাইজড বাটন স্টেটলেস উইজেটস।

স্টেটফুল উইজেটগুলি ডায়নামিক উইজেট, ব্যবহারকারীর ক্রিয়া বা ডেটা পরিবর্তনের উপর ভিত্তি করে এগুলি রানটাইম চলাকালীন আপডেট করা যেতে পারে। কোনও উইজেট যদি রান সময়কালে তার রাজ্য পরিবর্তন করতে পারে তবে তা রাষ্ট্রীয় উইজেট হবে।

15/11/2018 সম্পাদনা করুন

স্টেটলেস উইজেটগুলি ইনপুট / বাহ্যিক ডেটা পরিবর্তিত হলে (কনস্ট্রাক্টরের মাধ্যমে পাস করা বাহ্যিক ডেটা হচ্ছে এমন ডেটা) পুনরায় রেন্ডার করতে পারে। স্টেটলেস উইজেটগুলির কোনও রাজ্য না থাকায় এগুলি একবারে রেন্ডার হবে এবং সেগুলি আপডেট হবে না তবে কেবলমাত্র বাহ্যিক ডেটা পরিবর্তিত হলে আপডেট হবে।

যেখানে Stateful উইজেট একটি অভ্যন্তরীণ রাষ্ট্র আছে এবং করতে পুনরায় রেন্ডার ইনপুট ডেটা পরিবর্তন বা উইজেট রাষ্ট্রীয় পরিবর্তন যদি।

রাষ্ট্রবিহীন ও রাষ্ট্রীয় উভয় উইজেটের পৃথক জীবনচক্র রয়েছে।


এমনকি বাইরে থেকে Statelessউইজেটে নতুন ডেটা পাস করার পরেও আমরা রান সময়ে এটি খুব পরিবর্তন করতে পারি তবে এটিকে Statefulউইজেট বলা হয় না (আপনার শেষ লাইনের বিপরীতে)।
CopsOnRoad

আপনি কি দয়া করে ব্যাখ্যা করতে পারেন যে কোনও স্টেটলেস উইজেট কীভাবে "বাহ্যিক ডেটা পরিবর্তিত হলে আপডেট হতে পারে"? ("বাহ্যিক ডেটা হ'ল ডেটা যা কনস্ট্রাক্টরের মধ্য দিয়ে যায়")) কনস্ট্রাক্টরকে কেবল একবারই ডাকা হবে না? কনস্ট্রাক্টরের মাধ্যমে কীভাবে ডেটা কেটে গেল?
ব্যবহারকারী 1596274

8

আমি খুব সাধারণ উপমা সম্পর্কে ভাবতে পারি। আপনার কাছে বই, সজ্জা এবং একটি টিভি সহ কিছু আসবাবের টুকরো রয়েছে। আসবাব রাষ্ট্রহীন, কিছুই চলাচল করে না। টিভিতে, অন্যদিকে, আপনি এটি চালু করতে, বন্ধ করতে, চ্যানেল পরিবর্তন করতে, কোনও ডিভিডি সংযুক্ত থাকলে কোনও সিনেমা চালাতে পারেন etc. ইত্যাদি TV ফার্নিচারে আপনার কোনও রাজ্য নেই। ফার্নিচারে টিভির উপস্থিতি এটিতে কোনও রাজ্য যুক্ত করছে না। আশাকরি এটা সাহায্য করবে.


এটি প্রশ্নকারীর নির্দিষ্ট প্রশ্নের উত্তর দেয় না।
যিশাইয়

4
এটি একটি দুর্দান্ত উপমা!
উইলিয়াম টেরিল

6

স্ট্যাক ওভারফ্লো প্রশ্নের উত্তর - রাষ্ট্রীয়তা বনাম রাষ্ট্রহীনতা

ঝাঁকুনিতে, পার্থক্যটি হ'ল স্টেটলেস উইজেটগুলি সমস্ত নির্মাণকারীর যুক্তি দিয়েই সংজ্ঞায়িত করা যায়। আপনি যদি একই যুক্তি ব্যবহার করে দুটি স্টেটলেস উইজেট তৈরি করেন তবে সেগুলি একই হবে।

একটি রাষ্ট্রীয় উইজেট অবশ্য অপরিহার্যভাবে একই নির্মাণকারীর যুক্তিযুক্ত অন্যরকম নয়। এটি অন্যরকম অবস্থায় থাকতে পারে।
প্রকৃতপক্ষে, একটি রাষ্ট্রীয় উইজেট নিজেই অপরিবর্তনীয় (রাষ্ট্রবিহীন), তবে ফ্লুটার একটি পৃথক রাজ্য অবজেক্ট পরিচালনা করে এবং স্টেটফুল উইজেট ডকটিতে বর্ণিত উইজেটের সাথে এটি সংযুক্ত করে । এর অর্থ হ'ল যখন ফ্লাটার একটি স্টেটফুল উইজেট পুনর্নির্মাণ করে, এটি কোনও পূর্ববর্তী রাষ্ট্রের অবজেক্টটি পুনরায় ব্যবহার করা উচিত কিনা তা পরীক্ষা করে দেখাবে এবং যদি ইচ্ছা হয় তবে সেই স্টেট অবজেক্টটি উইজেটের সাথে সংযুক্ত করে।

অভিভাবক উইজেটটি রাষ্ট্রহীন কারণ এটি তার সন্তানের অবস্থা সম্পর্কে চিন্তা করে না। রাষ্ট্রীয় শিশু নিজেই (বা প্রযুক্তিগতভাবে বিড়বিড় করে) তার নিজের রাষ্ট্রের যত্ন নেবে।
উচ্চ স্তরে, আমি সম্মত হই যে এটি প্যারেন্ট উইজেটকে রাষ্ট্রীয় করে তোলে, কারণ দুটি পিতা-মাতার বিভিন্ন রাজ্যের দুটি সন্তান থাকতে পারে এবং এইভাবে তারা প্রযুক্তিগতভাবে পৃথক হতে পারে different তবে ফ্লাটারের দৃষ্টিকোণ থেকে, এটি রাষ্ট্র সম্পর্কে চিন্তাভাবনা না করে পিতা-মাতা উইজেট তৈরি করে এবং কেবল যখন শিশুটি তৈরি করবে তখন তার রাষ্ট্রীয়তা বিবেচনা করবে।


5

স্টেটফুল এবং স্টেটলেস উইজেটগুলি কী কী?

টিএল; ডিআর: একটি উইজেট যা আপনাকে পর্দা রিফ্রেশ করতে দেয় তা হল স্টেটফুল উইজেট। স্টেটলেস নয় এমন একটি উইজেট।

আরও বিশদে, কন্টেন্ট সহ একটি গতিশীল উইজেট স্টেটফুল উইজেট হওয়া উচিত। স্টেটলেস উইজেট কেবলমাত্র প্যারামিটারগুলি পরিবর্তিত হলে সামগ্রী পরিবর্তন করতে পারে এবং তাই উইজেটের শ্রেণিবিন্যাসে এর অবস্থানের পয়েন্টের উপরে করা দরকার। স্ট্যাটিক সামগ্রীযুক্ত একটি স্ক্রিন বা উইজেট স্টেটলেস উইজেট হওয়া উচিত তবে বিষয়বস্তু পরিবর্তন করতে, রাষ্ট্রীয় হওয়া দরকার।

আমি একটি আকর্ষণীয় মাঝারি গল্পে এই আপেক্ষিক সামগ্রীটি পেয়েছি। আপনাকে স্বাগতম!


4

রাজ্যহীন : উইজেট রাষ্ট্র কেবলমাত্র একমাত্র তৈরি করে, তারপরে এটি মানগুলি আপডেট করতে পারে তবে সুস্পষ্টভাবে স্টেট করে না। এটি সেখানে কাঠামো থেকেও পরিষ্কার। এ কারণেই এর কেবলমাত্র একটি শ্রেণি রয়েছে যা এর সাথে প্রসারিত StatelessWidget। সুতরাং যদি আমি বলি, তারা আর কখনও build()পদ্ধতিটি পুনরায় চালাতে পারবে না ।

জবাবদিহি : উইজেটগুলি তাদের স্টেট (স্থানীয়ভাবে) আপডেট করতে পারে এবং ইভেন্টটি ট্রিগার হওয়ার পরে একাধিকবার মান দেয় । এ কারণেই, বাস্তবায়নও আলাদা। StatefulWidgetএটিতে আমাদের ২ টি ক্লাস রয়েছে, একটি হ'ল এবং অন্যটি এটি রাজ্য বাস্তবায়ন হ্যান্ডলার অর্থাৎ State<YourWidget>। সুতরাং যদি আমি বলি, তারা build()ট্রিগার হওয়া ইভেন্টগুলির উপর ভিত্তি করে আবারও পদ্ধতিটি আবার চালাতে পারে ।

চিত্রের নীচে সাহায্য করবে।

এখানে চিত্র বর্ণনা লিখুন


1

কোনো অ্যাপ লেখা, আপনি সাধারণত লেখক হবেন করব নতুন উইজেট যে হয় এর উপশ্রেণী হয় StatelessWidget বা StatefulWidget

এখানে StatelessWidgetএবং StatefulWidgetউইজেটগুলির মধ্যে কিছু পার্থক্য রয়েছে :

স্টেটলেস উইজেট:

  1. একটি উইজেট যা একটি অপরিবর্তনীয় অবস্থা রয়েছে।
  2. স্টেটলেস উইজেটস স্ট্যাটিক উইজেটস।
  3. এগুলি কোনও ডেটা পরিবর্তন বা কোনও আচরণ পরিবর্তনের উপর নির্ভর করে না।
  4. স্টেটলেস উইজেটগুলির কোনও রাজ্য নেই, সেগুলি একবারে রেন্ডার হবে এবং সেগুলি নিজেরাই আপডেট হবে না, তবে কেবল তখনই আপডেট করা হবে যখন বাহ্যিক ডেটা পরিবর্তন হবে।
  5. উদাহরণস্বরূপ: Text, Icon, RaisedButtonStateless উইজেট হয়।

স্টেটলেস উইজেট:

  1. একটি উইজেট যা একটি পরিবর্তনীয় অবস্থা রয়েছে।
  2. স্টেটফুল উইজেটগুলি ডায়নামিক উইজেট।
  3. ব্যবহারকারী ক্রিয়া বা ডেটা পরিবর্তনের উপর ভিত্তি করে এগুলি রানটাইমের সময় আপডেট করা যেতে পারে updated
  4. স্টেটফুল উইজেটগুলির একটি অভ্যন্তরীণ অবস্থা রয়েছে এবং ইনপুট ডেটা পরিবর্তন হলে বা উইজেটের রাজ্য পরিবর্তন হলে পুনরায় রেন্ডার করতে পারে।
  5. উদাহরণস্বরূপ: Checkbox, Radio Button, SliderStateful উইজেট হয়

1

দাবি অস্বীকার: - গত সপ্তাহ থেকে তোলা নিয়ে কাজ শুরু করেছেন :)

স্টেটলেস এবং স্টেটফুল উইজেটের ইউআই তৈরি করতে এবং আপডেট করার জন্য তার নিজস্ব জীবনচক্র রয়েছে। তবে আপনি ইউআই রেন্ডার করতে স্টেটলেস বা স্টেটফুল ব্যবহার করতে পারেন তবে ইউআই বাহ্যিক ডেটার সাথে সম্পূর্ণ বা আংশিকভাবে নির্ভরশীল (যেমন - এপিআই ব্যবহার করে একটি তালিকা উপস্থাপন করা) যখন স্টেটলেস উইজেট ব্যবহার করে কোনও ইনপুট স্ক্রিনের মতো স্থিতিশীল ইউআই রেন্ডার করা হয়। একটি ভাল অনুশীলন


4
আমি মনে করি
লেখকটির

0

সহজ কথায়:

যেমনটি আমরা জানি প্রতিটি উইজেট হ'ল বিড়বিড় করে দেখা। যার নিজস্ব ক্লাস রয়েছে। যখন আমরা এই ক্লাসগুলি ব্যবহার করি আমরা এটির একটি অবজেক্ট তৈরি করি। আমরা তাদের বিভিন্ন ভেরিয়েবল / বৈশিষ্ট্যগুলিকে মান দিই। প্রাক্তন আমরা পাঠ্য উইজেট তৈরি করছি যাতে আমরা এটি স্ট্রিং, রঙ, ফন্ট আকার, ফন্ট পরিবার দিতে পারি। সুতরাং এটি দিয়ে, আমরা এটি তৈরি করার সময় এর বৈশিষ্ট্যগুলি সংজ্ঞায়িত করছি। এখনও অবধি স্টেটলেস বা স্টেটফুল উইজেটগুলি একই তবে,

আমরা যখন এর বৈশিষ্ট্যগুলি পরিবর্তন করতে / আপডেট করতে চাই (এর পরে স্ট্রিং বা রঙটি বলি) তারপরে আবার স্টেটফুল উইজেট হওয়া উচিত।

এবং যখন আমরা প্রথমবার সংজ্ঞা দেওয়ার পরে এর বৈশিষ্ট্যগুলি পরিবর্তন করতে চাই না তখন এটি স্টেটহীন উইজেট।

এর অর্থ আমরা উইজেটকে ধারণ / নিয়ন্ত্রণ / প্রদর্শন করে এমন ডেটা সম্পর্কে যত্নশীল।

সুতরাং স্টেটলেস ডেটা কম এবং স্টেটফুল ডেটা পূর্ণ।

এখন আপনি যদি কোনও শ্রেণি নির্ধারণ করেন যা রাষ্ট্রবিহীন যার অর্থ এই শ্রেণিটি এতে পরিবর্তনশীল না থাকে বা নিজস্ব শ্রেণিতে অর্থাত্ বর্গ স্তর বলতে পারে তবে এর মধ্যে আরও একটি উইজেট / শ্রেণি থাকতে পারে যা ডেটা সম্পর্কে চিন্তা করে অর্থাৎ এটি স্টেটফুল । সুতরাং একে অপরের উপর এর কোনও প্রভাব নেই।

আমি এখানে ভুল থাকলে দয়া করে আমাকে সংশোধন করুন।


0

স্টেটফুল এবং স্টেটলেস উইজেটগুলি কী কী?

স্টেটলেস উইজেট: স্টেটলেস উইজেট কেবল তখনই তৈরি হয় যখন এটি পিতামাতার পরিবর্তনের হয়।

স্টেটফুল উইজেটস: স্টেট ফুল উইজেটগুলি উইজেটের স্থিতি রাখে এবং রাষ্ট্র পরিবর্তন হলে পুনর্নির্মাণ করা যায়।

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