Цвет 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);
});
},
),
),
),
)