复选框在颤动中丢失了检查值
Posted
技术标签:
【中文标题】复选框在颤动中丢失了检查值【英文标题】: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);
,
),
),
),
);
,
),
);
【问题讨论】:
【参考方案1】:在某处,您将“模型”与“视图”混淆,并将状态存储在视图中。这必然意味着当视图被刷新或更新时,您将失去状态。
具体来说,这里的模型似乎是listOfAnswers
,它是build()
方法中的局部变量,可能会在每次刷新时重建(可能是120 fps!)。您需要将模型放在任何构建方法之外。
【讨论】:
谢谢,这很有帮助,但我还有其他问题。我的检查值保存在模型中,但是当我向下滚动并返回时选中的框没有被选中。您有什么想法或建议可以解决我的问题吗?以上是关于复选框在颤动中丢失了检查值的主要内容,如果未能解决你的问题,请参考以下文章