#flutter #iconbutton
#трепетание #кнопка значка
Вопрос:
У меня есть виджет текстового поля для поля пароля и кнопка значка для отображения / скрытия пароля. Я хочу, чтобы, когда пользователь нажимает на значок кнопки, он должен менять цвет. На самом деле, когда я запускаю print(showPassWordIconColor)
до и после нажатия кнопки значка, ее значение меняется. Однако он не отображает измененный цвет. Я видел некоторые другие вопросы и ответы на них, и я попробовал их, но я все еще получаю ту же проблему. Вот полный виджет. (изначально 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);
});
},
),
),
);
Комментарии:
1. где находится метод showPaswswordIconColor?
2. Это переменная типа Color, определенного в верхней части файла. Я могу добраться до него и изменить его в setState(), но отображаемый цвет не меняется.
Ответ №1:
Пожалуйста, проверьте приведенный ниже код.
Затем используйте приведенный ниже код.
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);
});
},
),
),
),
)
Комментарии:
1. Я уже объявил их как переменные в верхней части файла, и, как я упоминал, я могу получить доступ к этим переменным в моем виджете. Я могу обновить переменные _showPassword и showPasswordIconColor. Но я не могу обновить видимый цвет значка кнопки
2. хорошо, не проверяйте этот код, он уже отредактирован и работает с моим файлом
Ответ №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;
}
),
)