我正在Flutter上的一个应用程序Brewery Angela's课程,我已经到达了BMI计算器应用程序。一切都很好,直到我尝试在点击卡片时使用手势检测器改变男性和女性卡片的颜色。问题是,卡片的颜色只在我第一次点击它时发生变化,当我再次点击它时,它应该恢复到原来的颜色,但它仍然用新的颜色着色。
下面是该卡的代码:
Expanded(
child: GestureDetector(
onTap: () {
setState(() {
updateColour(0);
});
},
child: ReusableCard(
colour: maleCardColour,
cardChild: CardContent(
contentIcon: FontAwesomeIcons.male,
contentText: 'MALE'
),
),
),
),
下面是改变颜色的代码:
void updateColour(int gender) {
if (gender == 1) {
if (maleCardColour == inactiveCardColour) {
maleCardColour = activeCardColor;
print("male pressed");
} else {
maleCardColour = inactiveCardColour;
print(maleCardColour);
}
}
if (gender == 0) {
if (femaleCardColour == inactiveCardColour) {
femaleCardColour = activeCardColor;
print("female pressed");
} else {
femaleCardColour == inactiveCardColour;
}
}
}
你能帮我解决这个问题吗?我已经花了三天时间了。
我尝试将颜色从十六进制代码更改为材质颜色,但不起作用。我尝试在手势检测代码中的setState()中更改颜色,但仍然不起作用。我尝试创建一个基于性别选择的枚举,并更改updatecolor函数中的逻辑,以根据枚举的值更改颜色。也不起作用。
我希望当我点击卡片时,卡片的颜色从非活动状态变为活动状态。当再次点击时,卡片的颜色将变回非活动状态。
2条答案
按热度按时间rks48beu1#
每当maleCardColour变量更新时,您都应该调用setState((){})以重新构建ReusableCard小部件。
ie3xauqp2#
首先,您在卡片上使用了maleCardColour变量来反映颜色,但是当您使用gender 0更新color时,它正在更新另一个变量值femaleCardColour而不是maleCardColour,因此您需要调用updateColor(1)而不是updateColor(0)
其次,femaleCardColor else条件中也有一个问题,应该有一个赋值运算符而不是比较运算符。
femaleCardColour = inactiveCardColour;
顺便说一句,你可以通过使用简单的标志逻辑来实现这一点,因为卡选择或不选择,而不是再次分配颜色并将其作为性别处理。