ฉันจะแปลงสตริงสีฐานสิบหกเช่นเดียว#b74093
กับColor
ใน Flutter ได้อย่างไร
ฉันจะแปลงสตริงสีฐานสิบหกเช่นเดียว#b74093
กับColor
ใน Flutter ได้อย่างไร
คำตอบ:
ในกระพือColor
ระดับยอมรับเฉพาะจำนวนเต็มเป็นพารามิเตอร์หรือมีความเป็นไปได้ที่จะใช้ก่อสร้างชื่อและfromARGB
fromRGBO
ดังนั้นเราต้องแปลงสตริง#b74093
เป็นค่าจำนวนเต็มเท่านั้น นอกจากนี้เราต้องเคารพความทึบที่ต้องระบุเสมอ
255
(เต็ม) FF
ความทึบแสงเป็นตัวแทนจากค่าฐานสิบหก 0xFF
อย่างนี้แล้วทำให้เรามี ตอนนี้เราแค่ต้องต่อท้ายสตริงสีของเราดังนี้:
const color = const Color(0xffb74093); // Second `const` is optional in assignments.
ตัวอักษรสามารถเลือกเป็นตัวพิมพ์ใหญ่หรือไม่:
const color = const Color(0xFFB74093);
เริ่มต้นด้วยการปาเป้า2.6.0
, คุณสามารถสร้างextension
สำหรับColor
ชั้นที่ช่วยให้คุณใช้สตริงสีฐานสิบหกในการสร้าง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
สตริงแบบ hex ได้แบบไดนามิกเช่นเดียวกับที่ฉันทำไว้ด้านบน อย่างไรก็ตามการทำเช่นนี้หมายความว่าสีไม่สามารถเป็นconst
ได้
เป็นการดีที่คุณจะกำหนดสีของคุณตามที่ฉันอธิบายไว้ในส่วนแรกของคำตอบนี้ซึ่งมีประสิทธิภาพมากขึ้นเมื่อสร้างอินสแตนซ์สีจำนวนมากซึ่งโดยปกติจะเป็นกรณีของวิดเจ็ต Flutter
HexColor.fromHex
งานได้ แต่Color.fromHex
ไม่ได้)
0x
เพียงระบุว่าตัวเลขต่อไปนี้จะถูกแยกเป็นเลขฐานสิบหก🙃
Color
ชั้นคาดว่าจำนวนเต็ม ARGB เมื่อคุณพยายามที่จะใช้กับRGB
ค่าแสดงเป็น int 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
หากคุณต้องการใช้รหัสสีฐานสิบหกซึ่งอยู่ในรูปแบบ # 123456 นี้จะถูกนำมาใช้อย่างง่ายดายสร้างตัวแปร A ประเภทสีและกำหนดค่าต่อไปนี้
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 และคุณพร้อมที่จะไป
หากคุณต้องการเปลี่ยนความทึบของสีโดยตรงจากรหัสฐานสิบหกแล้วเปลี่ยนค่า ff ใน 0xff เป็นค่าตามลำดับจากตารางด้านล่าง
ค่าความทึบแสง Hex
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
ฟังก์ชั่นที่เรียบง่ายโดยไม่ต้องใช้คลาส:
Color _colorFromHex(String hexColor) {
final hexCode = hexColor.replaceAll('#', '');
return Color(int.parse('FF$hexCode', radix: 16));
}
คุณสามารถใช้สิ่งนี้:
Color color1 = _colorFromHex("b74093");
Color color2 = _colorFromHex("#b74093");
Color(int.parse('#000000'.replaceAll('#', '0xff')))
หากต้องการแปลงจากสตริงเลขฐานสิบหกเป็น int ให้ทำ:
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"));
ทางที่ง่าย :
String color = yourHexColor.replaceAll('#', '0xff');
การใช้งาน:
Container(
color: Color(int.parse(color)),
)
มีวิธีแก้ไขปัญหาอื่น หากคุณเก็บสีของคุณเป็นสตริง hex ปกติและไม่ต้องการเพิ่มความทึบ (นำ FF): 1) แปลงสตริง hex ของคุณเป็น int หากต้องการแปลง hex-string เป็นจำนวนเต็มให้ทำอย่างใดอย่างหนึ่งต่อไปนี้:
var myInt = int.parse(hexString, radix: 16);
หรือ
var myInt = int.parse("0x$hexString");
เป็นคำนำหน้าของ 0x (หรือ -0x) จะทำให้ค่าเริ่มต้น int.parse เพื่อ radix จาก 16
2) เพิ่มความทึบแสงให้กับสีของคุณผ่านรหัส
Color color = new Color(myInt).withOpacity(1.0);
ThemeData
สำหรับกระพือของ
ใน Flutter มันสร้างสีจาก RGB ด้วยอัลฟาให้ใช้
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),
);
// หรือเปลี่ยนค่า "FF"
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
///
/// 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,
)
)
สำหรับการอ้างอิงทั่วไป มีวิธีที่ง่ายกว่าการใช้ห้องสมุดเป็นซูเปอร์ แม้ว่าคุณสามารถใช้วิธีการส่วนขยายกับโซลูชันทั้งหมดที่กล่าวถึงคุณพบชุดเครื่องมือไลบรารีผู้ใช้ที่ใช้งานได้จริง
"#ff00ff".toColor(); // painless hex to color
"red".toColor(); // supports all web color names
ง่ายขึ้นใช่มั้ย
"#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;
}
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')
ฉันพลาดคำตอบที่ชัดเจนโดยใช้เลขฐานสิบหกสำหรับ constructor fromRGB:
Color.fromRGBO(0xb7, 0x40, 0x93, 1),
String hexString = "45a3df";
Color(int.parse("0xff${hexString}"));
ไม่ทราบว่าทำไมสิ่งนี้ถึงหยุดลงนี่คือทางออกสำหรับฉัน
วิธีเดียวที่ไม่ต้องการขั้นตอนเพิ่มเติม
คุณสามารถคลิกที่ Widget สีและมันจะบอกคุณในข้อมูลที่ลึกซึ้งยิ่งขึ้นว่าตัวอักษรเหล่านั้นเป็นอย่างไร คุณยังสามารถใช้วิธี Color.fromARGB () เพื่อสร้างสีที่กำหนดเองซึ่งง่ายกว่าสำหรับฉันมาก ใช้เว็บไซต์Flutter Doctor Color Pickerเพื่อเลือกสีที่คุณต้องการสำหรับแอพพลิเคชั่นพลิ้วของคุณ
คุณสามารถใช้แพ็คเกจนี้จาก_css_colorเพื่อColor
ออกจากสตริงฐานสิบหก รองรับสัญกรณ์ฐานสิบหก RGB ทั้งสามและหกหลัก
Color color = fromCSSColor('#ff00aa')
เพื่อประโยชน์ในการปรับให้เหมาะสมสร้างอินสแตนซ์สีหนึ่งครั้งสำหรับแต่ละสีและเก็บไว้ที่ใดที่หนึ่งเพื่อใช้ในภายหลัง