Цвет IconButton не меняется (Flutter)

У меня есть виджет TextField для поля пароля и IconButton для отображения / скрытия пароля. Я хочу, чтобы когда пользователь нажимал на IconButton, он менял цвет. Это действительно так, когда я бегу print(showPassWordIconColor)до и после нажатия кнопки IconButton ее значение изменяется. Однако он не отображает измененный цвет. Я видел некоторые другие вопросы и ответы на них, я пробовал их, но у меня все еще возникает та же проблема. Вот полный виджет. (изначально showPasswordIconColor = Colors.grey)

Widget passwordField = AppTextFormField(
  obscureText: !_showPassword,
  decoration: InputDecoration(
    hintText: "Password",
    border: OutlineInputBorder(),
    suffixIcon: IconButton(
      icon: Icon(
        Icons.remove_red_eye,
        color: showPasswordIconColor,
      ),
      onPressed: () {
        setState(() {
          _showPassword = !_showPassword;
          if (showPaswswordIconColor == Colors.grey) {
            showPaswswordIconColor = buttonColor;
          } else {
            showPaswswordIconColor = Colors.grey;
          }
          print(showPaswswordIconColor);
        });
      },
    ),
  ),
);

2 ответа

Если вы используете ThemeData, вы можете применить такую ​​схему.

      inputDecorationTheme: InputDecorationTheme(
        iconColor: MaterialStateColor.resolveWith((Set<MaterialState> states) {
          if (states.contains(MaterialState.focused)) {
            return Colors.green;
          }
          if (states.contains(MaterialState.error)) {
            return Colors.red;
          }
          return Colors.green;
        }
        ),
      )

Пожалуйста, проверьте приведенный ниже код.

Затем используйте приведенный ниже код.

       Container(
            width: 200,
            height: 200,
            child: TextFormField(
              obscureText: !_showPassword,
              decoration: InputDecoration(
                hintText: "Password",
                border: OutlineInputBorder(),
                suffixIcon: IconButton(
                  icon: Icon(
                    Icons.remove_red_eye,
                    color: showPasswordIconColor,
                  ),
                  onPressed: () {
                    setState(() {
                      _showPassword = !_showPassword;
                      if (showPasswordIconColor == Colors.grey) {
                        showPasswordIconColor = Colors.red;
                      } else {
                        showPasswordIconColor = Colors.grey;
                      }
                      print(showPasswordIconColor);
                    });
                  },
                ),
              ),
            ),
          )
Другие вопросы по тегам