flutter - 如何在expansionPanelList中展开全部或全部折叠 - Flutter
问题描述
我正在尝试在flutter中创建一个expansionPanelList,它有一个通用按钮来同时展开全部或折叠全部面板。
class Item {
Item({
this.expandedValue,
this.headerValue,
this.isExpanded = false,
});
String expandedValue;
String headerValue;
bool isExpanded;
}
List<Item> generateItems(int numberOfItems) {
return List.generate(numberOfItems, (int index) {
return Item(
headerValue: 'Panel $index',
expandedValue: 'This is item number $index',
);
});
}
// ...
List<Item> _data = generateItems(8);
@override
Widget build(BuildContext context) {
return SingleChildScrollView(
child: Container(
child: _buildPanel(),
),
);
}
Widget _buildPanel() {
return ExpansionPanelList(
expansionCallback: (int index, bool isExpanded) {
setState(() {
_data[index].isExpanded = !isExpanded;
});
},
children: _data.map<ExpansionPanel>((Item item) {
return ExpansionPanel(
headerBuilder: (BuildContext context, bool isExpanded) {
return ListTile(
title: Text(item.headerValue),
);
},
body: ListTile(
title: Text(item.expandedValue),
subtitle: Text('To delete this panel, tap the trash can icon'),
trailing: Icon(Icons.delete),
onTap: () {
setState(() {
_data.removeWhere((currentItem) => item == currentItem);
});
}
),
isExpanded: item.isExpanded,
);
}).toList(),
);
}
我试图解决这个问题一个星期。请让我知道要进行哪些更改。任何帮助,将不胜感激。
解决方案
您可以通过将所有值分别设置isExpanded
为任一true
或false
expandAll 或collapseAll 来实现。
例子:
实现一个方法来设置所有的值。
void _setAll(bool isExpanded) {
for (final data in _data) {
data.isExpanded = isExpanded ?? false;
}
setState(() {});
}
要扩展按钮单击,只需调用
_setAll(true);
崩溃
_setAll(false);
希望有帮助!
推荐阅读
- java - JdbcTemplate.query() 性能不佳
- python - 如何为 Dataframe 中的某些特定行插入新列的值?
- splunk - Splunk 如何监控文件/目录以及性能影响是什么?
- ms-word - 使用 OpenXML (.NET) 从 Word 文档中获取字体属性
- c# - 如何以编程方式更改 Unity 中 Rect Transform 组件的比例?
- emacs - 如何在emacs中跳转到光标下的函数
- javascript - 如何在javascript中拆分字符串包含分隔符?
- node.js - Puppeteer 在 Linux 上的 azure functions 节点上部署时引发启动异常
- java - 逻辑错误 Java - BMI 中的错误计算
- tosca - 如何使用 tosca 验证按钮的背景颜色和字体颜色