#flutter #listview #dart #checkbox #builder
#флаттер #listview #dart #флажок #Конструктор
Вопрос:
Я показываю свой список ответов через ListView.builder, и проверка значения на флажке работает нормально, но когда я прокручиваю вниз и поворачиваю назад, проверенное значение теряется. Другой способ, когда потерял фокус в проверенном ответе, автоматический флажок потерял проверенное значение. Ниже приведен мой код. Я был бы признателен, если бы кто-нибудь мог мне помочь.
class AnswerItem extends StatefulWidget {
@override
_AnswerItemState createState() => _AnswerItemState();
}
class _AnswerItemState extends State<AnswerItem> {
List<bool> _data = [false, false, false, false];
void _onChange(bool value, int index) {
setState(() {
_data[index] = value;
});
}
Widget build(BuildContext context) {
final questionItems = Provider.of<Item>(context);
List<Answer> listOfAnswers = questionItems.answers.toList();
return SingleChildScrollView(
child:
ListView.builder(
shrinkWrap: true,
itemCount: listOfAnswers.length,
itemBuilder: (context, index) {
return Padding(
padding: const EdgeInsets.symmetric(horizontal: 25),
child: Card(
child: Padding(
padding: const EdgeInsets.symmetric(horizontal: 10),
child: CheckboxListTile(
value: _data[index],
title: Text(listOfAnswers[index].title),
onChanged: (val) {
_onChange(val, index);
},
),
),
),
);
},
),
);
}
}
Ответ №1:
Где-то вы путаете «модель» с «представлением» и сохраняете состояние в представлении. Это обязательно означает, что при обновлении или обновлении представления вы потеряете состояние.
В частности, ваша модель здесь выглядит так listOfAnswers
, что, будучи локальной переменной внутри build()
метода, возможно, будет перестраиваться при каждом обновлении (возможно, 120 кадров в секунду!). Вам нужно поместить вашу модель вне любого метода сборки.
Комментарии:
1. Спасибо, это полезно, но у меня все еще есть другая проблема. Мои проверенные значения сохраняются в модели, но флажки, когда я прокручивал вниз и поворачивал назад, не отмечены. Есть ли у вас какие-либо идеи или предложения, как я могу решить свою проблему?