Радиокнопка с Listview.builder

#flutter

#флаттер

Вопрос:

У меня есть radiobutton в моем listview builder, listview builder building Cards, при вызове первого переключателя он меняется со всех последующих карт. Как я могу изолировать опцию переключателя только для выбранной карты?

  Center(
                        child: ListView.builder(
                            physics: NeverScrollableScrollPhysics(),
                            scrollDirection: Axis.vertical,
                            shrinkWrap: true,
                            itemCount: data != null ? data.length : 0,
                            itemBuilder: (BuildContext context, index) {
                              Map data = snapshot.data[index];
                              //alts.length = 0;
                              if (data['alts'] != null) {
                                alts = json.decode(data['alts']);
                                alts.forEach((element) {});
                              } else
                                return snapshot.data[index]['alts'] =
                                    Column(children: <Widget>[
                                  Container(
                                    padding:
                                        EdgeInsets.fromLTRB(10, 20, 10, 0),
                                    child: Card(                                                                                    
                                                child: Container(
                                                    padding:
                                                        EdgeInsets.only(
                                                            left: 0,
                                                            right: 25,
                                                            bottom: 15),
                                                    child: Row(
                                                      //  crossAxisAlignment:
                                                      //CrossAxisAlignment
                                                      //   .start,
                                                      mainAxisSize:
                                                          MainAxisSize.max,
                                                      mainAxisAlignment:
                                                          MainAxisAlignment
                                                              .spaceEvenly,
                                                      children: [
                                                        Row(children: [
                                                          Radio(
                                                              value: null,
                                                              groupValue:
                                                                  null,
                                                              onChanged:
                                                                  null),
                                                          Text(
                                                            'Certo',
                                                            style:
                                                                TextStyle(
                                                              color: Colors
                                                                  .black,
                                                              fontSize: 16,
                                                            ),
                                                          )
                                                        ]),
  

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

1. Почему вы не предоставляете некоторую информацию о своих данных? Кроме того, почему всем свойствам виджета Radio присваивается нулевое значение? Пожалуйста, внимательно прочитайте документацию: api.flutter.dev/flutter/material/Radio-class.html

2. Значение Radio равно нулю, потому что я еще ничего не создал для setstate…

3. «… при вызове первого переключателя он изменяется со всех последующих карт» — это означает, что свойство «значение» для каждой кнопки-переключателя одинаково, в вашем случае все они равны нулю. Таким образом, виджет Radio будет сравнивать значение null(значение) == null(групповое значение), которое является истинным, отсюда и результирующее поведение.

Ответ №1:

Попробуйте это небольшое дополнение к вашему коду:

 Row(children: [
    Radio(
        key: UniqueKey(),  // add this line
        value: null,
        groupValue: null,
        onChanged: null
    ),
  

Он предоставляет уникальный ключ для каждого переключателя.