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