2
respostas

Cor padrão dos label usando Flutter SDK 2.2.3

A cor dos labels to TextField passando o theme desta forma theme: ThemeData( primaryColor: Colors.green[900], elevatedButtonTheme: ElevatedButtonThemeData( style: ButtonStyle( backgroundColor: MaterialStateProperty.all( Colors.blueAccent[700], ), foregroundColor: MaterialStateProperty.all( Colors.white, ), ), ), ),

Não assume a cor primaryColor: Colors.green[900],, teria que usar a primarySwatch: Colors.green,mas ai não aceita o [900]. Teria como me dar uma luz de porque isso acontece e como adicionar uma cor expecifica para o primarySwatch

2 respostas

Fala Fernando, tudo bom?

Vê, o lance é que primarySwatch não é uma cor simples, é uma MaterialColor. Uma MaterialColor já é programada com os tons específicos de uma cor que um aplicativo vai usar.

A primaryColor é um desses tons. Para ser exato, primaryColor é normalmente igual a primarySwatch[500].

Geralmente é melhor definir um primarySwatch em vez de primaryColor. Porque alguns componentes de material podem usar um tom diferente da cor primária para coisas como sombra, borda, etc. É o caso do botão.

MAS! A boa notícia é que você pode criar seu próprio MaterialColor(int, Map<int,color>), o que ele pede é apenas um inteiro que representa o valor da cor primaria e um Map<int,color> com as cores que você quer usar. Algo tipo essa brincadeira que eu fiz aqui:

primarySwatch: MaterialColor(
          0xFF1B5E20,
          {
            50: Colors.green[500],
            100: Colors.green[600],
            200: Colors.green[700],
            300: Colors.green[800],
            500: Colors.green[900],
            600: Colors.blue[500],
            700: Colors.blue[600],
            800: Colors.blue[700],
            900: Colors.blue[800],
          },
        ),

Duas observações:

  1. Se for criar um MaterialColor personalizado, coloque os valores de 50 a 900 pra não dar nenhum problema em nenhum material depois.
  2. O valor que ele pede no int é como se fosse um hexadecimal da cor, o 0xFF equivale ao # e o que vem depois é o hexa normal. Então 0xFF1B5E20 equivale a #1B5E20.

Se você quiser descobrir o valor de uma cor específica que o Flutter já tem, basta pressionar Ctrl e clicar na cor:

Print do MaterialColor green do código interno do Flutter, nele vemos as cores em int de cada tom na MaterialColor


Outro caminho para resolver o problema da label, é usar isso dentro do seu InputDecoration do TextField:

labelStyle: TextStyle(
                color: Colors.white,
              ),

No mais é isso! Espero ter ajudado, e bons estudos!

Não entendi mas vamos seguindo nos estudos.