#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 должна быть полем в классе состояния, в который встроен диалог.