Представление списка с переключателями во флаттере снижает производительность

#flutter #dart

Вопрос:

Я хотел бы обновить, когда значение переключателя изменится в flutter, но это замедлит работу приложения.

Я создал следующий список с переключателями да и нет

           final List<ItemModel> _questions =
                   List.generate(100, (index) => ItemModel(name: 'nm_$index', id: index   1, checked: ''));


            ListTile(
                title: Text((index   1).toString()   ". "   question.name),
                subtitle: Column(
                  children: [
                    ListTile(
                      onTap: () {
                        setState(() {
                          _questions[index].checked = 'yes';
                        });
                      },
                      title: const Text("Yes"),
                      leading: Radio(
                          value: 'yes',
                          groupValue: question.checked,
                          onChanged: (val) {
                            setState(() {
                              _questions[index].checked = 'yes';
                            });
                          }),
                    ),
                    ListTile(
                      title: const Text("No"),
                      onTap: () {
                        setState(() {
                          _questions[index].checked = 'no';
                        });
                      },
                      leading: Radio(
                          value: 'no',
                          groupValue: question.checked,
                          onChanged: (val) {
                            setState(() {
                              _questions[index].checked = 'no';
                            });
                          }),
                    )
                  ],
                ));
 

В приведенном выше представлении списка есть две переключатели, где каждая строка помечена как » да » или «нет». Это хорошо работает для небольшого списка, но когда список увеличивается, как показано выше, на 100 элементов, приложение начинает замедляться. Я считаю, что это вызвано вызовом setState при каждом нажатии переключателя, который затем вызывает перестройку пользовательского интерфейса.

Есть ли способ обновить статус выбранного радио, не вызывая перестройки пользовательского интерфейса, или я могу улучшить вышеописанное, чтобы приложение перестало отставать и замедляться при большом количестве элементов.

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

1. Используйте ListView.builder так, чтобы предметы рисовались лениво. И вы также можете переместить логику в индикатор изменений, если производительность по-прежнему ниже номинальной. Таким образом, вы могли бы лучше контролировать то, что восстанавливается.