【问题标题】:checkbox lost checked value in flutter复选框在颤动中丢失了检查值
【发布时间】:2021-03-11 04:21:23
【问题描述】:

我通过 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);
                                    },
                               ),
                            ),
                         ),
                      );
                   },
                 ),
              );
          }      
       }

【问题讨论】:

    标签: flutter listview dart checkbox builder


    【解决方案1】:

    在某处,您将“模型”与“视图”混淆,并将状态存储在视图中。这必然意味着当视图被刷新或更新时,您将失去状态。

    具体来说,这里的模型似乎是listOfAnswers,它是build() 方法中的局部变量,可能会在每次刷新时重建(可能是120 fps!)。您需要将模型放在任何构建方法之外。

    【讨论】:

    • 谢谢,这很有帮助,但我还有其他问题。我的检查值保存在模型中,但是当我向下滚动并返回时选中的框没有被选中。您有什么想法或建议可以解决我的问题吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-06
    • 1970-01-01
    • 2012-06-23
    • 1970-01-01
    • 1970-01-01
    • 2013-10-28
    相关资源
    最近更新 更多