Как объявление переменной влияет на событие onTap? - PullRequest
2 голосов
/ 05 мая 2020

Итак, я пытался обнаружить жест для своего игрового приложения с помощью класса InkWell, и я пробовал много способов вызвать событие жеста.

После того, как я обнаружил событие жеста, которое работает с моим игровым приложением, я заметил, что если я попытался переключить переменную с именем mycolor, которую я использовал для переключения цвета прямоугольника, как показано ниже, для объявления вне Widget Build (). Это сработало !

, но когда я вернулся к объявлению внутри Widget Build (). Это не так!

Почему объявление переменной влияет на результат моего события жеста?

Перед объявлением переменной вне WidgetBuild ()

После объявления переменной вне WidgetBuild ()

class GameStructureState extends State<GameStructure>{

bool mycolor = true;
@override
 Widget build(BuildContext context) {
 double w = MediaQuery.of(context).size.width;
 double h = MediaQuery.of(context).size.height;
 //bool mycolor = true;
 //debugPaintPointersEnabled = true;
 return Center(
   child: Column(
     children: <Widget>[
      Row( children: <Widget>[
        InkWell(
          onTap: (){
            setState(() {
              mycolor = false;
              print(mycolor);
            });
          },
          child: Padding(
            padding: EdgeInsets.all(w/30),
            child: Container(width: 100.0,height: 100.0,color: mycolor ? Colors.blue:Colors.green,child: Text(mycolor.toString()),),
          ),
        ),
      ],
      ),
    ],
  ),
);
}
}

1 Ответ

1 голос
/ 05 мая 2020

КОГДА БУЛ ОБЪЯВЛЕН В СТРОКЕ ВИДЖЕТА:

При первом запуске вашего приложения myColor будет иметь значение true.

Когда вы объявляете setState () в детекторе жестов и устанавливаете myColor в false, это вызывает повторный запуск всей функции widgetBuild снова. Таким образом, myColor повторно инициализируется и снова устанавливается в значение true.

Таким образом, даже после того, как вы объявляете логическое значение myColor равным false, при перестроении виджета оно возвращается в значение true.

КОГДА BOOL ОБЪЯВЛЯЕТСЯ ВНЕ СТРОКИ ВИДЖЕТА:

При первом запуске вашего приложения myColor объявляется как true.

Когда вы объявляете setState () в детекторе жестов и устанавливаете для myColor значение false, это вызывает повторный запуск всей функции widgetBuild. Но на этот раз, поскольку myColor объявлен вне сборки виджета, он не инициализируется повторно. Так что это не верное значение. Вместо этого он остается ложным. Вот почему ваш код работает.

...