वैश्विक कुंजी का उपयोग करके फ़्लटर में एक और विजेट से एक विजेट राज्य को कैसे अपडेट किया जाए?

Nov 28 2020

मेरे पास एक मुख्य विजेट स्क्रीन है जिसमें दो मुख्य विजेट हैंडर है (लाल रंग से चिह्नित है) और एक सूची (बैंगनी के साथ चिह्नित)


यहां मेरे लिए है:

    class ScreenClient extends StatefulWidget {
      _ClientState createState() => _ClientState();
    }
    
    class _ClientState extends State<ScreenClient> {
      @override
      Widget build(BuildContext context) {
        return Column(
          mainAxisAlignment: MainAxisAlignment.start,
          children: <Widget>[
            ClientHeader(), // this is my header widget red
            Expanded(
              child: ClientList(), // this is my list widget purple
            ),
          ],
        );
      }
    }

हेडर विजेट में तीन विकल्प होते हैं जैसा कि आप देख सकते हैं Tous Bloquéऔर ayant Retard, मैं जो हासिल करने की कोशिश कर रहा हूं वह बैंगनी के साथ चिह्नित सूची विजेट के लिए क्लिक किए गए विकल्प का मूल्य है (क्योंकि वे विकल्प फिल्टर हैं और सूची तत्वों को आधार पर दिखाया जाना चाहिए। चुने हुए विकल्प)
मेरे पास राज्य प्रबंधन पैकेजों को समझने में कठिन समय है और जो मैं समझता Global Keysहूं वह ट्रिक कर सकता है लेकिन कैसे? । यहाँ मेरा हेडर विजेट कोड है:

class ClientHeader extends StatefulWidget {
  _HeaderClientState createState() => _HeaderClientState();
}

class _HeaderClientState extends State<ClientHeader> {
  String nomSituation;
  String option = "Tous";

  @override
  Widget build(BuildContext context) {
    return Container(
      child: Row(
        children: <Widget>[
          GestureDetector(
            child: Text(
              "Tous",
              style: TextStyle(
                color: option == "Tous" ? Colors.white : Colors.grey[400],
              ),
            ),
            onTap: () {
              setState(() {
                option = "Tous";
              });
            },
          ),
          GestureDetector(
            child: Text(
              "Bloqué",
              style: TextStyle(
                color: option == "Bloqué" ? Colors.white : Colors.grey[400],
              ),
            ),
            onTap: () {
              setState(() {
                option = "Bloqué";
                //add send value to ClientList widet ?
              });
            },
          ),
          GestureDetector(
            child: Text(
              "Ayant Retard",
              style: TextStyle(
                color:
                    option == "Ayant Retard" ? Colors.white : Colors.grey[400],
              ),
            ),
            onTap: () {
              setState(() {
                option = "Ayant Retard";
              });
            },
          ),
        ],
      ),
    );
  }
}

जवाब

1 yellowgray Nov 29 2020 at 06:06

मेरा सुझाव है कि आप इस वीडियो में 2 उदाहरण देख सकते हैं स्पंदन में व्यावहारिक राज्य प्रबंधन (गूगल मैं / O'19) के बारे में state mangement। इस वीडियो ने मुझे बहुत मदद की जब मैंने भीख मांगना सीख लिया। वे समझाते हैं कि StatefulWidgetदूसरे से कैसे नियंत्रित किया जाए :

  1. किसी अन्य विजेट द्वारा नियंत्रित राज्य को वैश्विक बनाएं ( 5m30s से )
  2. Provider2 विगेट्स ( 15m05s से ) के बीच मान को नियंत्रित करने के लिए, Flutter में एक बहुत लोकप्रिय समाधान है, का उपयोग करें

आपके पास अधिक समय है, आप अधिक फैंसी राज्य प्रबंधन पद्धति जैसे ब्लाक, MobX ( राज्य प्रबंधन दृष्टिकोणों की सूची ) या यहां तक ​​कि Providerनामित रिवरपॉड के अग्रिम संस्करण का अध्ययन कर सकते हैं , जो कुछ महीने पहले ही पुश करते हैं, जो प्रदाता का उपयोग करते समय कुछ विपक्ष को हल करने का प्रयास करते हैं।