Мой код флаттера не работает на эмуляторе. Детектор жестов, похоже, не обнаруживает жесты

#flutter #setstate #gesturedetector

#флаттер #setstate #gesturedetector

Вопрос:

Я перепробовал все виды вещей, в моем коде, похоже, нет ошибки. Я также проверил flutter doctor, но все равно не получил никаких результатов. Кто-нибудь может мне помочь, я новичок в кодировании. Я предполагаю, что у моего класса set state есть какая-то проблема, но в моем окне терминала ничего не отображается. Пожалуйста, помогите, я застрял с этой проблемой, и я не нашел в Google ничего, что могло бы ответить на мой вопрос.

Вот мой код

 class InputPage extends StatefulWidget {
  @override
  InputPageState createState() => InputPageState();
}


class InputPageState extends State<InputPage> {

  Color maleCardColor = inactiveCardColor;
  Color femaleCardColor = inactiveCardColor;

  void updateColor ( int gender) {
    // male was pressed
    if (gender == 1) {
      if (maleCardColor == inactiveCardColor) {
        maleCardColor = activeCardColor;
      } else {
        maleCardColor = inactiveCardColor;
      }
    }
    if (gender == 2) {
      if (femaleCardColor == inactiveCardColor) {
        femaleCardColor = activeCardColor;
      } else {
        femaleCardColor = inactiveCardColor;
      }
    }
  }


  @override
  Widget build(BuildContext context) {
    return Scaffold(
      backgroundColor: Color(0xFF10A0E21),
      appBar: AppBar(
        title: Text("BMI CALCULATOR",
        ),
        backgroundColor: Colors.black,
        centerTitle: true,
      ),
      body: Column(
           children: [
             Expanded(
               child: Row(
                children: [
                  Expanded(
                    child: GestureDetector(
                      onTap: () {
                        setState(() {
                          updateColor(1);
                        });
                      },
                      child: ReusableCard(
                        cardColor:inactiveCardColor,
                        cardChild: IconContent(
                        iconImage: FontAwesomeIcons.mars,
                        iconText: "MALE",) ,
                      ),
                    ),
                  ),
                  Expanded(
                    child:GestureDetector(
                      onTap: (){
                      setState(() {
                        updateColor(2);
                      });
                      },
                      child:ReusableCard(cardColor:inactiveCardColor,
                        cardChild: 
                       IconContent(iconImage:FontAwesomeIcons.venus,
                          iconText: "FEMALE",),
                      ),
                    ),`enter code here`
                  ),
                ],
              ),
            ),
  

Комментарии:

1. Используйте реальное устройство

Ответ №1:

Используйте setState для изменения состояния

 if (gender == 2) {
      if (femaleCardColor == inactiveCardColor) {
         setState((){
           femaleCardColor = activeCardColor;
         }); 
      } else {
         setState((){
        femaleCardColor = inactiveCardColor;
         }); 
      }
    }
  

А также удалите setState отсюда

 setState(() {
   updateColor(2);
});
  

Комментарии:

1. используйте a breakpoint , чтобы увидеть и изменить точный поток вашего приложения.

2. также обратитесь к этому api.flutter.dev/flutter/widgets/State/setState.html