Диалоговое окно предупреждения о флаттере setState не меняется

#flutter #dart

Вопрос:

Я пытаюсь изменить некоторые значения bool в своем диалоговом окне. Я делаю вот так

    showDialog(
      context: context,
      builder: (context) {
        return StatefulBuilder(
          builder: (context, setState) {
            bool testBool = true;
            return Dialog(
              shape: RoundedRectangleBorder(
                  borderRadius:
                  BorderRadius.circular(12.0),
                  side: BorderSide(
                      color:
                      kPrimaryColor)), //this right here
              child: GestureDetector(
                onTap: (){
                  print(testBool);
                  setState((){
                    testBool = !testBool;

                  });
                  print(testBool);
                },
                child: Container(
                  height: 525,
                  width: width * 0.85,
                  child:
                  Text('12313', style: TextStyle(color: testBool? Colors.red : Colors.green),),
                ),
              ),
            );
          },
        );
      },
    );
 

Но он не меняет цвет, я имею в виду, что он не меняет testBool состояние в диалоговом окне.

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

1. bool testBool = true; должно быть выше StatefulBuilder.builder ,

Ответ №1:

Ваш код в порядке, но вы ставите bool условие внутри builder , поэтому каждый раз, когда вы вызываете setState его, оно снова устанавливается true равным .

 showDialog(
  context: context,
  builder: (context) {
    bool testBool = true; // This flag should be here.
    return StatefulBuilder(
      builder: (context, setState) {
        // ... 
      },
    );
  },
);
 

Ответ №2:

Вы должны определить переменную testbool вне StatefulBuilder , потому что всякий раз , когда вы выполняете setState , программа StatefulBuilder перестраивается, и поэтому переменная testbool определяется снова.

Ответ №3:

Как упоминал bool testBool = true; Копсон, он находится не в том месте. Когда вы вызываете setState, он перестраивает виджет, а когда он перестраивает виджет, он определяет testBool и устанавливает для него значение true. Переменная testBool должна быть полем в классе состояния, в который встроен диалог.