所以,我的问题是:
在Flutter中是否有一种方法可以只扩展动态生成的ListView的一个ExpansionTile?
例如我的ListView有三个ExpansionTiles,然后单击第一个,它会扩展。现在,如果我点击第二个,则第二个应展开,而第一个应将其自身关闭。
我考虑过使用修改后的ExpansionTile(https://stackoverflow.com/a/48935106/3775957),但无法提出解决方案。
在我的脑海中,它应该像将任务放入“ onExpansionChanged”方法中一样工作,但我不知道怎么做。
我这样构建ListView:
ListView.builder(
itemCount: myArray.length,
itemBuilder: (context, index) {
return ExpansionTile(
backgroundColor: Colors.grey[200],
key: PageStorageKey('${myArray[index].name}'),
title: Text(myArray[index].name),
children: _buildChildrenWidgets(
groupName: myArray[index].name,
childrenNames: myArray[index].anotherArray),
);
});
答案 0 :(得分:0)
您可以使用ExpansionPanelList
像这样
ListView.builder(
itemCount: snapshot.data.length,
itemBuilder: (BuildContext context, int i) {
return Card(
child: ExpansionPanelList(
expansionCallback: (int index, bool status) {
setState(() {
_activeMeterIndex =
_activeMeterIndex == i ? null : i;
});
},
children: [
ExpansionPanel(
isExpanded: _activeMeterIndex == i,
headerBuilder:
(BuildContext context, bool isExpanded) =>
Container(
padding: const EdgeInsets.only(left: 15.0),
alignment: Alignment.centerLeft,
child: Text(
snapshot.data[i].category,
),
),
body: Column(
children: snapshot.data[i].subcategory.map((e) {
return Text(e);
}).toList(),
),
),
],
),
);
},
);