Как использовать шестнадцатеричные цветные строки в Flutter? - PullRequest
0 голосов
/ 29 апреля 2018

Как преобразовать шестнадцатеричную цветовую строку как #b74093 в Color во флаттере?

Ответы [ 9 ]

0 голосов
/ 15 мая 2019

если ваш цвет # e41749, просто добавьте перед ним 0xff

так что вы можете написать это как:

Цвет: Цвет (0xffe41749);

0 голосов
/ 11 июня 2019

Вы можете нажать на Color Widget, и он расскажет вам в более глубокой информации о том, как эти буквы обозначают. Вы также можете использовать метод Color.fromARGB () для создания пользовательских цветов, что намного проще для меня. Используйте веб-сайт Flutter Doctor Color Picker , чтобы выбрать любой цвет, который вы хотите использовать для флаттера.

0 голосов
/ 04 апреля 2019
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')

0 голосов
/ 10 мая 2019

const appBackground = Color (0xffdf7599);

df7599 - это шестнадцатеричный код вашего цвета

0 голосов
/ 23 декабря 2018

Класс 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
0 голосов
/ 11 июля 2018

Есть другое решение. Если вы сохраняете свой цвет как обычную шестнадцатеричную строку и не хотите добавлять к ней прозрачность (ведущий FF): 1) конвертировать вашу шестнадцатеричную строку в int Чтобы преобразовать шестнадцатеричную строку в целое число, выполните одно из следующих действий:

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

или

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

в качестве префикса 0x (или -0x) установит для int.parse значение по умолчанию, равное 16.

2) Добавьте непрозрачность к вашему цвету с помощью кода

Color color = new Color(myInt).withOpacity(1.0);
0 голосов
/ 16 июня 2018

"#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;
}
0 голосов
/ 13 мая 2018

Чтобы преобразовать шестнадцатеричную строку в 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"));
0 голосов
/ 29 апреля 2018

В Flutter Color класс принимает только целые числа в качестве параметров , или существует возможность использовать именованные конструкторы fromARGB и fromRGBO.

Таким образом, нам нужно только преобразовать строку #b74093 в целочисленное значение. Также мы должны учитывать, что opacity всегда нужно указывать.
255 (полная) непрозрачность представлена ​​шестнадцатеричным значением FF. Это уже оставляет нас с 0xFF. Теперь нам просто нужно добавить нашу цветовую строку следующим образом:

final color = const Color(0xffb74093);

Буквы могут быть выбраны с большой буквы или нет:

final color = const Color(0xFFB74093);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...