我正在尝试创建可折叠的listView。
为了使列表中的每个项目都能单独处理点击,我创建了一个布尔列表。但是,当我构建页面时,出现此错误。 我看不到我在做什么错。
你能帮我吗?
List<bool> toogleList;
Container(
padding: EdgeInsets.fromLTRB(23, 0, 20, 20),
child: ListView.builder(
physics: new NeverScrollableScrollPhysics(),
shrinkWrap: true,
itemCount: widget.responseDaily['list'].length,
itemBuilder: (BuildContext ctxt, int index) {
setState(() {
toogleList.insert(index, false);
});
return InkWell(
onTap: (){
setState(() {
toogleList[index] = !toogleList[index];
});
},
child: Flexible(
flex: 2,
fit: FlexFit.tight,
child: RotationTransition(
turns: (toogleList[index] == false) ? AlwaysStoppedAnimation(0) : AlwaysStoppedAnimation(180 / 360),
child: Icon(
Icons.expand_less,
size: 16,
),
),
),
),
)
答案 0 :(得分:0)
class _HmeState extends State<Hme>
{
List<bool> toogleList = [false, false, false];
@override
Widget build(BuildContext context)
{
return MaterialApp
(
home: Scaffold
(
body: Container
(
padding: EdgeInsets.only(top: 100),
width: double.infinity,
color: Colors.blue,
child: ListView.builder
(
itemCount: 3,
itemBuilder: (BuildContext context, int index)
{
return Card
(
child: InkWell
(
child: Text(toogleList[index].toString()),
onTap: ()
{
print(index);
setState(()
{
toogleList[index] = !toogleList[index];
});
},
)
);
}
)
)
),
);
}
}
答案 1 :(得分:0)
首先,在setState
构建项目时,您不应该调用ListView
。如果这样做,您会得到一个错误。
第二,您的逻辑将继续在每次单击项目时插入false
,并且bool
的值不会按预期变化(当多次单击某个项目时,它们将始终为true`:
INSTEAD:
生成bool
的列表,其值设置为false
:
List<bool> toogleList = List.generate(widget.responseDaily['list'].length, (index) => false);
在检测到点击/单击项目时更改值:
onTap: () {
setState(() {
toogleList[index] = !toogleList[index];
});
},