जब मैंने निम्नलिखित कोड लिखा, तो मुझे उम्मीद थी कि पाठ लाल होगा:
Theme(
data: Theme.of(context).copyWith(
textTheme: Theme.of(context).textTheme.copyWith(
bodyText2: TextStyle(color: Colors.red),
),
buttonTheme: Theme.of(context)
.buttonTheme
.copyWith(buttonColor: Colors.yellow),
),
child: Builder(
builder: (context) {
return Column(
children: [
Text('Flutter'),
Text('is awesome!'),
RaisedButton(
onPressed: () {},
child: Text('OK'),
)
],
);
},
),
)
लेकिन टेक्स्ट काला था जबकि बटन पीला था जैसा कि आप देख सकते हैं: यहां
जैसा कि आप देख सकते हैं कि Text
विजेट्स ने थीम में परिभाषित शैली को अनदेखा कर दिया जबकि RaisedButton
ने ऐसा नहीं किया। क्यों?
मुझे पता है कि मैं इसके बजाय DefaultTextStyle
का उपयोग कर सकता हूं, लेकिन मैं यह समझने की कोशिश कर रहा हूं कि यह मेरी अपेक्षा के अनुरूप काम क्यों नहीं कर रहा है।
1 उत्तर
Text
विजेट में style
प्रॉपर्टी है। जैसा कि हम docs से देख सकते हैं:
If the [style] argument is null, the text will use the style from the
closest enclosing [DefaultTextStyle].
यह स्पष्ट है कि टेक्स्ट DefaultTextStyle
विजेट से शैली का उपयोग करता है (Theme
से नहीं) यदि आपने इसे वैसे ही निर्दिष्ट नहीं किया है जैसा आपने किया था। यदि आप विषय से शैली का उपयोग करना चाहते हैं तो आपको इसे स्पष्ट रूप से निर्दिष्ट करना चाहिए:
Text('Flutter', style: Theme.of(context).textTheme.bodyText2)
बटनों के लिए - कोई भी मटेरियलबटन चाइल्ड (RaisedButton भी) ButtonTheme.of(context).textTheme
का उपयोग textTheme
संपत्ति के डिफ़ॉल्ट मान के रूप में करता है।
संबंधित सवाल
नए सवाल
flutter
स्पंदन Google द्वारा बनाई गई एक ओपन-सोर्स UI सॉफ़्टवेयर डेवलपमेंट किट है। इसका उपयोग Android, iOS, Linux, Mac, Windows, Google Fuchsia और वेब के लिए एक ही कोडबेस से एप्लिकेशन विकसित करने के लिए किया जाता है। स्पंदन ऐप्स डार्ट भाषा में लिखे गए हैं।
DefaultTextStyle
को स्पष्ट रूप से जोड़ने की आवश्यकता नहीं है अगर हमMaterialApp
स्तर पर एक विषय को परिभाषित करते हैं।