Получить флажок в AlertDialog - PullRequest
0 голосов
/ 01 мая 2020

Я добавил AlertDialog, в котором Checkbox есть, но если я нажму на Checkbox, он не получит зацепку. Я также добавил еще один Checkbox ниже AlertDialog, и этот получил хук, нажав на него. Я думаю, что это связано с setState(), но я не знаю. Кто-нибудь знает решение? Заранее спасибо

ListTile(
                title: Text("Test"),
                trailing: Icon(Icons.fitness_center),
                onTap: () {
                  showDialog(
                    context: context,
                    builder: (BuildContext context) {
                      return AlertDialog(
                        title: Text("Test"),
                        content: Column(
                          children: <Widget>[
                            Row(
                              children: <Widget>[
                                Checkbox(
                                  value: checkBoxValueTheraband,
                                  onChanged: (bool value) {
                                    setState(() {
                                      checkBoxValueTheraband = value;
                                      exerciseChooser();
                                    });
                                  },
                                ),
                                Text("Theraband"),
                              ],
                            ),),);});})

1 Ответ

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

setState , который вы используете в showDialog , не "принадлежит" ему, что означает, что он не будет ничего перестраивать в нем и фактически обновит состояние родительского элемента, который " владеет "этим. Вместо этого вы даете ему собственный StatefulBuilder, который имеет собственный StateSetter setState в качестве параметра. Теперь, когда setState используется, он вызовет builder и изменит состояние чего-либо в этом виджете.

 content: StatefulBuilder(
             builder: (BuildContext context, StateSetter setState) {
                return  Column(
                          children: <Widget>[
                            Row(
                              children: <Widget>[
                                Checkbox(
                                  value: checkBoxValueTheraband,
                                  onChanged: (bool value) {
                                    setState(() { 
                                   checkBoxValueTheraband = value;
                                      exerciseChooser();
                                    });
                                  },
                                ),
                                Text("Theraband"),

                              ]),

                            ]);

                   }
               )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...