আমি কীভাবে হেল্পাডেসিমাল রঙের স্ট্রিংগুলি ফ্লার্টে ব্যবহার করব?


214

আমি কিভাবে কনভার্ট করব হেক্সাডেসিমেল রঙ পংক্তি মত #b74093একটি থেকে Colorপাখির মধ্যে?

উত্তর:


348

ঝাঁকুনিতে Colorশ্রেণিটি কেবলমাত্র পরামিতি হিসাবে পূর্ণসংখ্যাকে গ্রহণ করে , বা নামকরণকারী কনস্ট্রাক্টর এবং ব্যবহার করার সম্ভাবনা রয়েছেfromARGBfromRGBO

সুতরাং আমাদের কেবল স্ট্রিংকে #b74093একটি পূর্ণসংখ্যার মানতে রূপান্তর করতে হবে । এছাড়াও আমাদের শ্রদ্ধা করতে হবে যে অস্বচ্ছতা সর্বদা নির্দিষ্ট করা দরকার।
255(পূর্ণ) অস্বচ্ছতা হেক্সাডেসিমাল মান দ্বারা প্রতিনিধিত্ব করা হয় FF। এটি ইতিমধ্যে আমাদের সাথে ছেড়ে যায় 0xFF। এখন, আমাদের কেবল আমাদের রঙের স্ট্রিংটি যুক্ত করতে হবে:

const color = const Color(0xffb74093); // Second `const` is optional in assignments.

বর্ণগুলি পছন্দ অনুসারে মূলধন করা যায় বা না:

const color = const Color(0xFFB74093);

ডার্ট দিয়ে শুরু করে 2.6.0, আপনিextensionColor ক্লাসের জন্য একটি তৈরি করতে পারেন যা আপনাকে একটি Colorবিষয় তৈরি করতে হেক্সাডেসিমাল রঙের স্ট্রিং ব্যবহার করতে দেয় :

extension HexColor on Color {
  /// String is in the format "aabbcc" or "ffaabbcc" with an optional leading "#".
  static Color fromHex(String hexString) {
    final buffer = StringBuffer();
    if (hexString.length == 6 || hexString.length == 7) buffer.write('ff');
    buffer.write(hexString.replaceFirst('#', ''));
    return Color(int.parse(buffer.toString(), radix: 16));
  }

  /// Prefixes a hash sign if [leadingHashSign] is set to `true` (default is `true`).
  String toHex({bool leadingHashSign = true}) => '${leadingHashSign ? '#' : ''}'
      '${alpha.toRadixString(16).padLeft(2, '0')}'
      '${red.toRadixString(16).padLeft(2, '0')}'
      '${green.toRadixString(16).padLeft(2, '0')}'
      '${blue.toRadixString(16).padLeft(2, '0')}';
}

fromHexপদ্ধতি একটি ঘোষণা করা যেতে পারে mixinবা classকারণ HexColorনাম স্পষ্টভাবে যাতে এটা ব্যবহার করার জন্য নির্দিষ্ট করা প্রয়োজন, কিন্তু এক্সটেনশন জন্য দরকারী toHexপদ্ধতি, যা পরোক্ষভাবে ব্যবহার করা যাবে। এখানে একটি উদাহরণ:

void main() {
  final Color color = HexColor.fromHex('#aabbcc');

  print(color.toHex());
  print(const Color(0xffaabbcc).toHex());
}

হেক্স স্ট্রিং ব্যবহারের অসুবিধা

এখানে অন্যান্য উত্তরগুলির মধ্যে অনেকগুলি দেখায় যে আপনি কীভাবে গতিশীলভাবে Colorহেক্স স্ট্রিং থেকে একটি তৈরি করতে পারবেন , যেমন আমি উপরে করেছি। তবে এটি করার অর্থ এই যে রঙটি একটি হতে পারে না const
আদর্শভাবে, আপনি এই বর্ণনার উত্তরটির প্রথম অংশে যেভাবে ব্যাখ্যা করেছেন সেভাবে আপনি আপনার রঙগুলি বরাদ্দ করবেন, যা অনেকগুলি রং ইনস্ট্যান্ট করার সময় আরও কার্যকর, যা সাধারণত ফ্লার্ট উইজেটগুলির ক্ষেত্রে হয়।


আপনি ডার্টে এখনও স্ট্যাটিক পদ্ধতি সম্প্রসারণ করতে পারবেন না github.com/dart-lang/language/issues/723
Wiśniewski

1
@ AsukaszWiśniewski হ্যাঁ, আপনি পারেন;) আপনি কেবল বর্ধিত শ্রেণিটি ব্যবহার করে তাদের কল করতে পারবেন না ( HexColor.fromHexকাজ Color.fromHexকরে না তবে)।
ক্রিয়েটিভ ক্রিয়েটোরমায়াবেনোট

আমি কেবল অবাক হয়েছি যে আপনি একটি অন্তর্গত অংশ হিসাবে 0xFF পাস করতে পারবেন
হামিশ জনসন

@ হামিশ জনসন 0xকেবল ইঙ্গিত করে যে নিম্নলিখিত সংখ্যাগুলি হেক্সাডেসিমেল p হিসাবে পার্স করা হবে
ক্রিয়েটিভ ক্রিয়েটরঅরমায়বেনোট

135

Colorবর্গ একটি ARGB পূর্ণসংখ্যা প্রত্যাশা করে। যেহেতু আপনি এটিকে RGBমান সহ ব্যবহার করার চেষ্টা করছেন তাই এটি ইন্ট হিসাবে উপস্থাপন করুন এবং এর সাথে উপসর্গ করুন 0xff

Color mainColor = Color(0xffb74093);

আপনি যদি এতে বিরক্ত হন এবং এখনও স্ট্রিংগুলি ব্যবহার করতে চান তবে আপনি Colorস্ট্রিং কনস্ট্রাক্টরকে প্রসারিত এবং যুক্ত করতে পারেন

class HexColor extends Color {
  static int _getColorFromHex(String hexColor) {
    hexColor = hexColor.toUpperCase().replaceAll("#", "");
    if (hexColor.length == 6) {
      hexColor = "FF" + hexColor;
    }
    return int.parse(hexColor, radix: 16);
  }

  HexColor(final String hexColor) : super(_getColorFromHex(hexColor));
}

ব্যবহার

Color color1 = HexColor("b74093");
Color color2 = HexColor("#b74093");
Color color3 = HexColor("#88b74093"); // if you wish to use ARGB format

এটা সত্যিই দুর্দান্ত! লিনিয়ারগ্র্যাডিয়েন্টের সাথেও কাজ করে।
xhinoda

হেক্সকালার ক্লাসটি আমার জন্য ম্যাটারিয়াল কলারের জন্য কাজ করে নি, এটি দ্বিতীয় প্যারামিটারের অভিযোগ করে চলে। দয়া করে এখানে সহায়তা করুন
লিসকডার

20

আপনি যদি রঙের হেক্স কোড ব্যবহার করতে চান যা এই ফর্ম্যাট # 123456 এ রয়েছে তবে এটি খুব সহজেই ব্যবহার করা যায়, রঙের একটি ভেরিয়েবল তৈরি করুন এবং এটিতে নিম্নলিখিত মানগুলি নির্ধারণ করুন।

Color myHexColor = Color(0xff123456) 

// her you notice I use the 0xff and that is opacity or transparency of the color 
// and you can also change these value .

myhexcolor ব্যবহার করুন এবং আপনি যেতে প্রস্তুত।

আপনি যদি হেক্স কোড থেকে রঙের বর্ণের অস্বচ্ছতা পরিবর্তন করতে চান তবে নীচের টেবিল থেকে 0xff এ ff মানটি যথাক্রমে মানে পরিবর্তন করুন।

হেক্স অস্বচ্ছতার মান

100% - এফএফ

95% - এফ 2

90% - E6

85% - ডি 9

80% - সিসি

75% - বিএফ

70% - বি 3

65% - এ 6

60% - 99

55% - 8 সি

50% - 80

45% - 73

40% - 66

35% - 59

30% - 4 ডি

25% - 40

20% - 33

15% - 26

10% - 1 এ

5% - 0 ডি

0% - 00


1
এই রেফারেন্সটি সংরক্ষণ করা ভাল ধারণা, যদিও .withOpacity (0.2) বেশিরভাগ ক্ষেত্রেই যথেষ্ট দরকারী।
গৌরিস জাভিয়ার

18

হেক্সাডেসিমাল স্ট্রিং থেকে ইনটে রূপান্তর করতে, করুন:

int hexToInt(String hex)
{
  int val = 0;
  int len = hex.length;
  for (int i = 0; i < len; i++) {
    int hexDigit = hex.codeUnitAt(i);
    if (hexDigit >= 48 && hexDigit <= 57) {
      val += (hexDigit - 48) * (1 << (4 * (len - 1 - i)));
    } else if (hexDigit >= 65 && hexDigit <= 70) {
      // A..F
      val += (hexDigit - 55) * (1 << (4 * (len - 1 - i)));
    } else if (hexDigit >= 97 && hexDigit <= 102) {
      // a..f
      val += (hexDigit - 87) * (1 << (4 * (len - 1 - i)));
    } else {
      throw new FormatException("Invalid hexadecimal value");
    }
  }
  return val;
}

কল উদাহরণ:

Color color=new Color(hexToInt("FFB74093"));

18

ক্লাস ব্যবহার না করে একটি সাধারণ ফাংশন:

Color _colorFromHex(String hexColor) {
  final hexCode = hexColor.replaceAll('#', '');
  return Color(int.parse('FF$hexCode', radix: 16));
}

আপনি এটি এর মতো ব্যবহার করতে পারেন:

Color color1 = _colorFromHex("b74093");
Color color2 = _colorFromHex("#b74093");

1
সম্পাদনার জন্য থানস্ক @ জিরোইন-মাইজার আসলে আপনি যদি এই অভিনবতা অনুভব করেন তবে আপনি এই ওয়ান লাইনারটিও ব্যবহার করতে পারেনColor(int.parse('#000000'.replaceAll('#', '0xff')))
অ্যালভিন কোন্ডা


14

আরও একটি সমাধান আছে। আপনি যদি নিজের রঙকে সাধারণ হেক্স স্ট্রিং হিসাবে সঞ্চয় করেন এবং এতে অস্বচ্ছতা যুক্ত করতে চান না (1 টি এফএফ): 1) আপনার হেক্স স্ট্রিংটিকে পূর্ণসংখ্যায় রূপান্তর করতে একটি হেক্স-স্ট্রিংকে একটি পূর্ণসংখ্যায় রূপান্তর করতে নিম্নলিখিতগুলির মধ্যে একটি করুন:

var myInt = int.parse(hexString, radix: 16);

অথবা

var myInt = int.parse("0x$hexString");

0x এর উপসর্গ হিসাবে (বা -0x) 16 এর মূলতকে int.parse ডিফল্ট করবে।

2) কোডের মাধ্যমে আপনার রঙে অস্বচ্ছতা যুক্ত করুন

Color color = new Color(myInt).withOpacity(1.0);

1
ফ্লুটারসের জন্য আমার "শীর্ষস্থানীয় এফএফ" দরকার ছিল ThemeData
ক্রিয়েটিভ ক্রিয়েটোরমায়াবেনোট

আমি এই সমাধানটি এর সরলতার জন্য পছন্দ করি, তবে @ ক্রিয়েটিভ ক্রিয়েটরিওরমায়েবেনোট উল্লিখিত হিসাবে, নেতৃস্থানীয় এফএফ এখনও প্রয়োজন।
কেভিনএম

7

বিড়বিড় করে এটি আরজিবি থেকে আলফা সহ একটি রঙ তৈরি করে, ব্যবহার করুন

return new Container(
  color: new Color.fromRGBO(0, 0, 0, 0.5),
);

কীভাবে হেক্স-রঙ ব্যবহার করবেন:

return new Container(
  color: new Color(0xFF4286f4),
);
//0xFF -> the opacity (FF for opaque)
//4286f4 -> the hex-color

অস্বচ্ছতার সাথে হেক্স-রঙ:

return new Container(
  color: new Color(0xFF4286f4).withOpacity(0.5),
);

// বা "এফএফ" মান পরিবর্তন করুন

100%FF
 95%F2
 90%E6
 85%D9
 80%CC
 75%BF
 70%B3
 65%A6
 60%99
 55%8C
 50%80
 45%73
 40%66
 35%59
 30%4D
 25%40
 20%33
 15%26
 10%1A
 5%0D
 0%00

আরও জানার জন্য অফিশিয়াল লিঙ্ক https://api.flutter.dev/flutter/dart-ui/Color-class.html অনুসরণ করুন


5

utils.dart

///
/// Convert a color hex-string to a Color object.
///
Color getColorFromHex(String hexColor) {
  hexColor = hexColor.toUpperCase().replaceAll('#', '');

  if (hexColor.length == 6) {
    hexColor = 'FF' + hexColor;
  }

  return Color(int.parse(hexColor, radix: 16));
}

উদাহরণ ব্যবহার

Text(
  'hello world',
  style: TextStyle(
    color: getColorFromHex('#aabbcc'),
    fontWeight: FontWeight.bold,
  )
)

5

সাধারণ রেফারেন্সের জন্য। সুপারচার্জযুক্ত লাইব্রেরিটি ব্যবহার করার একটি সহজ উপায় রয়েছে । যদিও, আপনি উল্লিখিত সমস্ত সমাধান সহ এক্সটেনশন পদ্ধতিগুলি ব্যবহার করতে পারেন, আপনি ব্যবহারিক ব্যবহারকারী লাইব্রেরি সরঞ্জামকিট খুঁজে পাবেন।

"#ff00ff".toColor(); // painless hex to color
"red".toColor(); // supports all web color names

সহজ, তাই না?

supercharged


4

"#b74093"? ঠিক আছে...

টু এইচএক্স রেসিপি

int getColorHexFromStr(String colorStr)
{
  colorStr = "FF" + colorStr;
  colorStr = colorStr.replaceAll("#", "");
  int val = 0;
  int len = colorStr.length;
  for (int i = 0; i < len; i++) {
    int hexDigit = colorStr.codeUnitAt(i);
    if (hexDigit >= 48 && hexDigit <= 57) {
      val += (hexDigit - 48) * (1 << (4 * (len - 1 - i)));
    } else if (hexDigit >= 65 && hexDigit <= 70) {
      // A..F
      val += (hexDigit - 55) * (1 << (4 * (len - 1 - i)));
    } else if (hexDigit >= 97 && hexDigit <= 102) {
      // a..f
      val += (hexDigit - 87) * (1 << (4 * (len - 1 - i)));
    } else {
      throw new FormatException("An error occurred when converting a color");
    }
  }
  return val;
}

4
import 'package:flutter/material.dart';
class HexToColor extends Color{
  static _hexToColor(String code) {
    return int.parse(code.substring(1, 7), radix: 16) + 0xFF000000;
  }
  HexToColor(final String code) : super(_hexToColor(code));
}

নতুন ক্লাসটি আমদানি করুন এবং এটি ব্যবহার করুন HexToColor('#F2A03D')


3

আরজিবি কনস্ট্রাক্টরের জন্য হেক্স নম্বর ব্যবহার করে আমি সুস্পষ্ট উত্তরটি মিস করেছি:

Color.fromRGBO(0xb7, 0x40, 0x93, 1),

1

আপনি রঙিন উইজেটে ক্লিক করতে পারেন এবং এটি আপনাকে আরও গভীর তথ্যতে জানায় যে সেই অক্ষরগুলি কীভাবে দাঁড়ায়। আপনি কাস্টম রঙ তৈরি করতে কালার.ফর্মআরজিবি () পদ্ধতিটিও ব্যবহার করতে পারেন যা আমার কাছে সহজ easier ব্যবহারের পাখির ডক্টর রঙ বাছাইকারি ওয়েবসাইট কোন রঙ আপনার ঝাপটানি অ্যাপ্লিকেশনের জন্য আপনি চান বাছাই।


0
String hexString = "45a3df";
Color(int.parse("0xff${hexString}"));

কেন এটিকে অবনমিত করা হচ্ছে তা জানেন না, এটি আমার জন্য সমাধান ছিল।
অতিরিক্ত পদক্ষেপের প্রয়োজন নেই এমন একমাত্র উপায়


0

হেক্স স্ট্রিং থেকে বেরিয়ে আসার জন্য আপনি এই প্যাকেজটি_ css_color ব্যবহার করতে পারেন Color। এটি তিন এবং ছয় সংখ্যার আরজিবি হেক্স স্বরলিপি উভয় সমর্থন করে।

Color color = fromCSSColor('#ff00aa')

অপ্টিমাইজেশনের জন্য প্রতিটি রঙের জন্য একবার রঙ উদাহরণ তৈরি করুন এবং পরে ব্যবহারের জন্য এটি কোথাও সঞ্চয় করুন।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.