флажок потерял проверенное значение при флаттере

#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. Спасибо, это полезно, но у меня все еще есть другая проблема. Мои проверенные значения сохраняются в модели, но флажки, когда я прокручивал вниз и поворачивал назад, не отмечены. Есть ли у вас какие-либо идеи или предложения, как я могу решить свою проблему?