मैं साधारण मिक्सिन बना सकता हूं और उपयोग कर सकता हूं लेकिन मिक्सिन के तरीकों में सेटस्टेट, माउंटेड, संदर्भ आदि तक पहुंचने के लिए मुझे उन्हें राज्य वर्ग से पैरामीटर के रूप में पास करने की आवश्यकता है।

जब मैं किसी स्टेटफुल विजेट के राज्य पर इसका उपयोग करने के लिए कुछ बॉयलरप्लेट कोड वाले राज्य पर मिक्सिन बनाना चाहता हूं, लेकिन मुझे दो त्रुटियां मिलती हैं:

error: 
The class '_ProfilePageState' cannot implement both 'State<ProfilePage>' and 'State<StatefulWidget>'
because the type arguments are different.
error: 
Type parameters could not be inferred for the mixin 'NotificationHandlers'
because no type parameter substitution could be found matching the mixin's supertype constraints.

mixin परिभाषा इस तरह दिखती है:

mixin NotificationHandlers on State {
  void foo(Map bla) {
    //use setState / context / other properties or State here
  }
}
7
The Tahaan 8 सितंबर 2019, 12:27

1 उत्तर

सबसे बढ़िया उत्तर

आपको अपना mixin इस प्रकार परिभाषित करना चाहिए:

mixin NotificationHandlers<T extends StatefulWidget> on State<T> {
  // Now you can access all of State's members and use the mixin with State classes.
  // Example:
  @override
  void initState() {
    // ...
    super.initState();
  }
}

यह सुनिश्चित करता है कि आपके mixin का सामान्य प्रकार आपकी State कक्षा के लिए सामान्य प्रकार के समान है। यदि आप on State के प्रकार को छोड़ देते हैं, तो यह डिफ़ॉल्ट रूप से StatefulWidget हो जाएगा, लेकिन आपको सटीक प्रकार से मिलान करने की आवश्यकता है, जिसे आप मेरे द्वारा प्रदान किए गए सिंटैक्स के साथ कर सकते हैं।


महत्वपूर्ण सिंटैक्स mixin YourMixin<T extends StatefulWidget> on State<T> है।

18
creativecreatorormaybenot 8 सितंबर 2019, 10:00