大家好,我是 flutter 的新手,所以我試圖構建一個 BMI 計算器,所以我試圖在“MALE”和“FEMALE”之間創建一個切換開關,這樣當點擊一張卡時,另一張卡變得不活動,我是嘗試使用三元代碼來實作這一目標
但問題是如果我在模擬器上運行應用程式,如果我點擊“男性”部分,它不會被選中,但如果我點擊“女性”部分,“男性”卡會被選中,“女性”卡保持非活動狀態并且“男性”卡仍然保持活動狀態,除非我重新加載應用程式但它沒有解決問題。
所以請如果有人可以告訴我如何解決該錯誤。我會為此感到高興

enum Gender {
male,
female,
empty,
}
class ReuseableCard extends StatelessWidget {
ReuseableCard({required this.colour, this.cardChild, this.onPress});
final Color colour;
final Widget? cardChild;
final VoidCallback? onPress;
@override
Widget build(BuildContext context) {
return GestureDetector(
onTap: onPress,
child: Container(
child: cardChild,
margin: EdgeInsets.all(15),
decoration: BoxDecoration(
color: colour, borderRadius: BorderRadius.circular(15))),
);
}
}
class _InputPageState extends State<InputPage> {
Gender selectedGender = Gender.empty;
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Center(child: Text('BMI CALCULATOR')),
),
body: Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: [
Expanded(
child: Row(
children: [
Expanded(
child: ReuseableCard(
cardChild: cardTitle(
fontIcon: FontAwesomeIcons.mars,
cardText: 'MALE',
),
//I DONT KNOW IF I AM WRONG HERE
colour: selectedGender == Gender.male
? activeCardColor
: inactiveCardColor,
),
),
Expanded(
child: ReuseableCard(
onPress: () {
setState(() {
selectedGender = Gender.male;
});
},
cardChild: cardTitle(
fontIcon: FontAwesomeIcons.venus,
cardText: 'FEMALE',
),
//I DONT KNOW IF I AM WRONG HERE
colour: selectedGender == Gender.female
? activeCardColor
: inactiveCardColor,
),
)
],
)),
Expanded(
child: ReuseableCard(
onPress: () {
selectedGender = Gender.female;
},
colour: activeCardColor,
cardChild: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text(
'HEIGHT',
style: labelTextStyle,
),
Row(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.baseline,
textBaseline: TextBaseline.alphabetic,
children: [
Text(
height.toString(),
style: numberStyle,
),
Text('cm'),
],
),
SliderTheme(
data: SliderTheme.of(context).copyWith(
inactiveTrackColor: Color(0xFF8D8E98),
thumbColor: Color(0xFFEB1555),
overlayColor: Color(0x29EB1555),
activeTrackColor: Colors.white,
thumbShape:
RoundSliderThumbShape(enabledThumbRadius: 20.0),
overlayShape:
RoundSliderOverlayShape(overlayRadius: 30.0)),
child: Slider(
value: height.toDouble(),
min: 120.0,
max: 220.0,
onChanged: (double newValue) {
setState(() {
height = newValue.round();
});
},
),
),
],

uj5u.com熱心網友回復:
我可以看到您的男性框沒有方法,onPress因此它不會執行任何操作,而您的女性框onPress將值設定為 ,male以便單擊女性框將使男性處于活動狀態并且對女性框沒有任何作用,并且出于某種原因,您的height框將值設定為female。
你需要將onPress方法上移一級??
母盒上的那個把它移到 -> 公盒
高度框上的一個將其移動到 -> 女性框
這應該可以解決問題。
uj5u.com熱心網友回復:
您發布的螢屏截圖中的 Yemi 對女性卡片進行了以下更改...
// from this
onPress: (){
selectedGender = Gender.male;
}
// to this
onPress: (){
setState((){
selectedGender = Gender.female;
});
}
我建議您花點時間重新觀看您正在觀看的教程中的模塊 - 我假設您正在學習 Angela yu 的課程。另外,如果您感到有壓力,請休息一下,稍后再回來
uj5u.com熱心網友回復:
在男性onPress 中添加此行
setState((){
selectedGender = Gender.male;
})
并在 famele onPress 中添加這一行
setState((){
selectedGender = Gender.female;
})
它將解決您的問題。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/387091.html
