Нужно ли вызывать setState () для каждого GestureDetector, который я использовал? - PullRequest
2 голосов
/ 06 мая 2020

Итак, я снова делал свое игровое приложение, используя фреймворк flutter. и я попытался использовать несколько GestureDetectors на моей странице игры.

поэтому я попытался не повторять свой код функции, который должен вызываться, когда я нажимаю этот GestureDetector, объявив его вне Widget Build ().

и тут происходит что-то странное. для каждого GestureDetector, использующего эту функцию. эти функции уже были вызваны еще до того, как я нажимал что-либо на экране своего android эмулятора.

Значит ли это, что мне нужно сделать отдельную функцию для каждого GestureDetectors, чтобы избежать этой проблемы?

Widget build(BuildContext context) {
double w = MediaQuery.of(context).size.width;
double h = MediaQuery.of(context).size.height;
//debugPaintSizeEnabled = true;

void playSlot(int x,int y){
  var posx = x-1;
  var posy = y-1;
  mycolor = mycolor ? false : true;
  toggle[posx][posy] = toggle[posx][posy] ? false : true;
  if(mycolor){
    slot[posx][posy] = 2;
  }
  else{slot[posx][posy] = 1;}
  print(mycolor);
}

return Scaffold(
  body: Center(
    child: Column(
      children: <Widget>[
        //////////////////////////Score Board ////////////////////////////////////////
        GameScore(side1Score: mainGame.getSide1Win(),side2Score: mainGame.getSide2Win(),turn: mycolor,),
        //////////////////////////Score Board ////////////////////////////////////////

        //////////////////////////Game Structure ////////////////////////////////////////
        Container(
          height: h/2,
          child: Container(
            child: Column(
              children: <Widget>[
                Expanded(
                  child: Row(
                    children: <Widget>[
                      GameSlot(onTapE:(){setState(() {playSlot(1,1);});},c: toggle[0][0],id: slot[0][0]),
                      GameSlot(onTapE:(){setState(() {playSlot(1,2);});},c: toggle[0][1],id: slot[0][1]),
                      GameSlot(onTapE:(){setState(() {playSlot(1,3);});},c: toggle[0][2],id: slot[0][2]),
                    ],
                  ),
                ),
                Expanded(
                  child: Row(
                    children: <Widget>[
                      GameSlot(onTapE:(){setState(() {playSlot(2,1);});},c: toggle[1][0],id: slot[1][0]),
                      GameSlot(onTapE:(){setState(() {playSlot(2,2);});},c: toggle[1][1],id: slot[1][1]),
                      GameSlot(onTapE:(){setState(() {playSlot(2,3);});},c: toggle[1][2],id: slot[1][2]),
                    ],
                  ),
                ),
                Expanded(
                  child: Row(
                    children: <Widget>[
                      GameSlot(onTapE:(){setState(() {playSlot(3,1);});},c: toggle[2][0],id: slot[2][0]),
                      GameSlot(onTapE:(){setState(() {playSlot(3,2);});},c: toggle[2][1],id: slot[2][1]),
                      GameSlot(onTapE:(){setState(() {playSlot(3,3);});},c: toggle[2][2],id: slot[2][2]),
...