Como faço para converter uma seqüência de cor hexadecimal como #b74093
a um Color
em vibração?
Em Flutter, a Color
classe aceita apenas números inteiros como parâmetros , ou existe a possibilidade de usar os construtores nomeados fromARGB
e fromRGBO
.
Portanto, precisamos apenas converter a string #b74093
em um valor inteiro. Também precisamos respeitar que a opacidade sempre precisa ser especificada.
255
opacidade (total) é representada pelo valor hexadecimal FF
. Isso já nos deixa com 0xFF
. Agora, só precisamos acrescentar nossa sequência de cores assim:
const color = const Color(0xffb74093); // Second `const` is optional in assignments.
As letras podem, por opção, ser maiúsculas ou não:
const color = const Color(0xFFB74093);
A partir do Dart 2.6.0
, você pode criar umextension
para a Color
classe que permite usar seqüências de cores hexadecimais para criar um Color
objeto:
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')}';
}
O fromHex
método também pode ser declarado em mixin
ou class
porque o HexColor
nome precisa ser especificado explicitamente para usá-lo, mas a extensão é útil para o toHex
método, que pode ser usado implicitamente. Aqui está um exemplo:
void main() {
final Color color = HexColor.fromHex('#aabbcc');
print(color.toHex());
print(const Color(0xffaabbcc).toHex());
}
Muitas das outras respostas aqui mostram como você pode criar dinamicamente um a Color
partir de uma string hexadecimal, como eu fiz acima. No entanto, fazer isso significa que a cor não pode ser a const
.
Idealmente, você atribuiria suas cores da maneira que expliquei na primeira parte desta resposta, que é mais eficiente ao instanciar muitas cores, o que geralmente é o caso dos widgets do Flutter.
HexColor.fromHex
funciona, masColor.fromHex
não funciona ).0x
apenas indica que os seguintes dígitos serão analisados como um hexadecimal 🙃A
Color
classe espera um número inteiro ARGB. Como você tenta usá-lo comRGB
valor, represente-o como int e prefixe-o com0xff
.Se você ficar chateado com isso e ainda desejar usar strings, poderá estender
Color
e adicionar um construtor de stringsuso
fonte
se você deseja usar o código hexadecimal de cor que está nesse formato # 123456, ele é muito facilmente usado, crie variáveis A do tipo Color e atribua os seguintes valores a ele.
use myhexcolor e você está pronto para começar.
se você quiser alterar a opacidade da cor diretamente do código hexadecimal, altere o valor ff em 0xff para o valor respectivamente da tabela abaixo.
Valores de opacidade hexadecimal
100% - FF
95% - F2
90% - E6
85% - D9
80% - CC
75% - AM
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
fonte
Para converter de String hexadecimal em int, faça:
Exemplo de chamada:
fonte
Uma função simples sem usar uma classe:
Você pode usá-lo assim:
fonte
Color(int.parse('#000000'.replaceAll('#', '0xff')))
Jeito fácil :
Uso:
fonte
Existe outra solução. Se você armazena sua cor como uma sequência hexadecimal normal e não deseja adicionar opacidade (FF inicial): 1) Converta sua sequência hexadecimal em int Para converter uma sequência hexadecimal em um número inteiro, siga um destes procedimentos:
ou
como um prefixo de 0x (ou -0x) tornará int.parse o padrão para a raiz de 16.
2) Adicione opacidade à sua cor via código
fonte
ThemeData
.No Flutter, ele cria uma cor RGB com alfa, use
Como usar a cor hexadecimal:
Cor hexagonal com opacidade:
// ou altere o valor "FF"
Para mais, siga o link oficial https://api.flutter.dev/flutter/dart-ui/Color-class.html
fonte
utils.dart
exemplo de uso
fonte
Para referência geral. Existe uma maneira mais simples de usar a biblioteca Supercharged . Embora você possa usar métodos de extensão com todas as soluções mencionadas, você encontra um prático kit de ferramentas da biblioteca do usuário.
Mais fácil, certo?
Sobrecarregado
fonte
"#b74093"
? ESTÁ BEM...Para receita HEX
fonte
Importe a nova classe e use-a assim
HexToColor('#F2A03D')
fonte
Perdi a resposta óbvia usando números hexadecimais para o construtor fromRGB:
fonte
Você pode clicar no widget de cores e ele fornece informações muito mais detalhadas sobre como essas letras representam. Você também pode usar o método Color.fromARGB () para criar cores personalizadas, o que é muito mais fácil para mim. Use o site do Flutter Doctor Color Picker para escolher a cor que você deseja para o seu aplicativo de vibração.
fonte
Não sei por que isso está sendo derrubado, essa foi a solução para mim.
A única maneira de não exigir etapas adicionais
fonte
Você pode usar este pacote from_css_color para
Color
sair de uma sequência hexadecimal. Ele suporta notação hexadecimal RGB de três e seis dígitos.Para fins de otimização, crie uma instância de Color uma vez para cada cor e armazene-a em algum lugar para uso posterior.
fonte