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

तो मेरे पास एक ऐप है (यह मेरा नहीं है, लेकिन मैं इसमें योगदान दे रहा हूं), और इसमें रंगीन पृष्ठभूमि पर लिख रहा है, जिसे उपयोगकर्ता द्वारा बदला जा सकता है। यदि पृष्ठभूमि पर्याप्त उज्ज्वल है तो लेखन काला दिखाई देना चाहिए लेकिन यदि ऐसा नहीं है तो सफेद रहना चाहिए।

आवेदन प्राथमिक और उच्च विद्यालय के छात्रों के लिए एक स्कूल डायरी ऐप है जो हंगरी में राज्य-व्यापी स्कूल डायरी सेवा से जुड़ता है। यहां, सबसे अच्छा नोट 5 है, सबसे खराब 1 है। उपयोगकर्ता सेटिंग्स में प्रत्येक ग्रेड के रंग सेट कर सकता है। अभी, नोट "4" के लिए केवल कोड को काला पाठ रखने के लिए हार्ड-कोड किया गया है (क्योंकि "4" नोटों पर पृष्ठभूमि डिफ़ॉल्ट रूप से पीली है), अन्य सभी में सफेद है। यही मैं स्वचालित करना चाहता हूं।

सफेद पाठ का उदाहरण

काले पाठ का उदाहरण

संदर्भ के लिए यह ऐप की मुख्य स्क्रीन है

वह पृष्ठ जहां उपयोगकर्ता एक प्रकार के नोट के लिए रंग बदल सकता है

कोड अभी:

switch (evaluation.NumberValue) {
    case 1:
      bColor = globals.color1;
      fColor = Colors.white;
      break;
    case 2:
      bColor = globals.color2;
      fColor = Colors.white;
      break;
    case 3:
      bColor = globals.color3;
      fColor = Colors.white;
      break;
    case 4:
      bColor = globals.color4;
      fColor = Colors.black; //This should be white if color4 is dark enough. Same applies to all of them.
      break;
    case 5: //I'm looking for something like this:
      bColor = globals.color5;
      fColor = (lightLevel(globals.color5) > 50) ? Colors.black : Colors.white;
      break;
    default:
      bColor = Colors.black;
      fColor = Colors.white;
      break;
  }

मैं ऐसा कुछ ढूंढ रहा हूं:

 case 5: //I'm looking for something like this:
  bColor = globals.color5;
  fColor = (lightLevel(globals.color5) > 50) ? Colors.black : Colors.white;
  break;

हर प्रकार की सहायता के लिए आपका धन्यवाद!

2
RedyAu 25 जिंदा 2020, 16:35

2 जवाब

सबसे बढ़िया उत्तर
Brightness.estimateBrightnessForColor method e.g.
Color calculateTextColor(Color background) {
  return Brightness.estimateBrightnessForColor(background) == Brightness.light ? Colors.black : Colors.white;
}

मैंने पाया कि विधि estimateBrightnessForColor अब थीमडेटा वर्ग का हिस्सा है, इसलिए अब इस तरह कॉल करने की आवश्यकता है:

ThemeData.estimateBrightnessForColor(background)
1
Jorge Vieira 16 मई 2021, 17:54
1
धन्यवाद, मैंने सही उत्तर अपडेट किया है तदनुसार टिक करें :)
 – 
RedyAu
19 मई 2021, 17:09

मैं 2 विकल्प सुझा सकता हूं:

  1. Brightness.estimateBrightnessForColor विधि उदा.
Color calculateTextColor(Color background) {
  return Brightness.estimateBrightnessForColor(background) == Brightness.light ? Colors.black : Colors.white;
}

  1. Color.computeLuminance तरीका उदा.
Color calculateTextColor(Color background) {
  return background.computeLuminance() >= 0.5 ? Colors.black : Colors.white;
}

हालांकि बाद वाले को computationally expensive to calculate के रूप में वर्णित किया गया है।

कृपया मुझे बताएं कि क्या इससे मदद मिली।

2
George 25 जिंदा 2020, 16:54
बहुत - बहुत धन्यवाद! मैं पहले काम करने में सक्षम नहीं था, लेकिन विधि धीमी होने पर कोई समस्या नहीं है, इसे केवल एक ही कहा जाता है, जब उपयोगकर्ता रंग बदलता है।
 – 
RedyAu
26 जिंदा 2020, 02:45