StatefulWidget को डेटा पास करना और इसे Flutter में इसे एक्सेस करना


124

मेरे फ़्लटर ऐप में 2 स्क्रीन हैं: रिकॉर्ड बनाने और संपादित करने के लिए रिकॉर्ड और स्क्रीन की सूची।

अगर मैं दूसरी स्क्रीन पर ऑब्जेक्ट पास करता हूं तो इसका मतलब है कि मैं इसे संपादित करने जा रहा हूं और अगर मैं इसे पास करता हूं तो इसका मतलब है कि मैं नया आइटम बना रहा हूं। संपादन स्क्रीन स्टेटफुल विजेट है और मुझे यकीन नहीं है कि मेरे मामले के लिए इस दृष्टिकोण https://flutter.io/cookbook/navigation/passing-data/ का उपयोग कैसे किया जाए ।

class RecordPage extends StatefulWidget {
  final Record recordObject;

  RecordPage({Key key, @required this.recordObject}) : super(key: key);

  @override
  _RecordPageState createState() => new _RecordPageState();
}

class _RecordPageState extends State<RecordPage> {
  @override
  Widget build(BuildContext context) {
   //.....
  }
}

मैं कैसे उपयोग कर सकते हैं recordObject अंदर _RecordPageState ?



_RecordPageState वर्ग के फ़ंक्शन में हम 'recordObject' चर मान का उपयोग कैसे कर सकते हैं?
कमलेश

जवाबों:


208

_RecordPageState में recordObject का उपयोग करने के लिए, आपको बस नीचे की तरह widget.objectname लिखना होगा

class _RecordPageState extends State<RecordPage> {
  @override
  Widget build(BuildContext context) {
   .....
   widget.recordObject
   .....
  }
}

9
जो लोग फ़्लटर के लिए नए हैं, वे विजेट को परिभाषित करना नहीं भूलते हैं जैसे '@override RecordPage get widget => super.widget;'
hk

22
@hhk यह क्यों आवश्यक है?
हरोहटेर

2
कक्षा का recordObjectहिस्सा नहीं होना चाहिए State? तार्किक रूप से, इसमें शामिल StatefulWidgetहोना गलत है (सामंजस्य के संदर्भ में)। इसके अलावा, सभी क्षेत्रों को StatefulWidgetअपरिवर्तनीय होना चाहिए - यदि आप recordObjectसंदर्भ बदलना चाहते हैं तो क्या होगा ?
एलेक्स सेमीनेक

मेरे पास बिल्कुल समान है और यह कुछ ऐसा काम नहीं कर रहा है Text(widget.recordObject), यह कहता है कि मेरा संस्करण शून्य है
दानी

_RecordPageState वर्ग के फ़ंक्शन में हम 'recordObject' चर मान का उपयोग कैसे कर सकते हैं?
कमलेश

32
class RecordPage extends StatefulWidget {
  final Record recordObject;

  RecordPage({Key key, @required this.recordObject}) : super(key: key);

  @override
  _RecordPageState createState() => new _RecordPageState(recordObject);
}

class _RecordPageState extends State<RecordPage> {
  Record  recordObject
 _RecordPageState(this. recordObject);  //constructor
  @override
  Widget build(BuildContext context) {.    //closure has access
   //.....
  }
}

1
कृपया समझाएं कि यह एक स्टेटफुल विजेट क्यों है।
लोकलहोस्ट

@atilkan क्योंकि ओपी प्रारंभिक स्क्रिप्ट एक स्टेटफुलवेट है, उन्होंने जरूरतों को पूरा करने के लिए कुछ पंक्तियों को जोड़ा।
आराधना

3
मुझे नहीं लगता कि recordObjectइन Stateऔर StatefulWidgetकक्षाओं दोनों का क्षेत्र होना एक अच्छा विचार है (भले ही मैंने ट्यूटोरियल को बिल्कुल ऐसा करते देखा हो)। वर्ग के क्षेत्र का StatefulWidgetउपयोग करके खेतों तक पहुँचने का दृष्टिकोण एक अधिक सही दृष्टिकोण की तरह लगता है (भले ही इसकी अपनी समस्याएं हों)widgetState
एलेक्स सेमेनिएक

21

पूर्ण उदाहरण

इसका निर्माण करने वाले का उपयोग करके आपको राज्य में पैरामीटर पास करने की आवश्यकता नहीं है। आप widget.myField का उपयोग करके आसानी से इन तक पहुंच सकते हैं ।

class MyRecord extends StatefulWidget {
  final String recordName;
  const MyRecord(this.recordName);

  @override
  MyRecordState createState() => MyRecordState();
}

class MyRecordState extends State<MyRecord> {
  @override
  Widget build(BuildContext context) {
    return Text(widget.recordName); // Here you direct access using widget
  }
}

स्क्रीन को नेविगेट करते समय अपना डेटा पास करें:

 Navigator.of(context).push(MaterialPageRoute(builder: (context) => MyRecord("WonderWorld")));
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.