flutter - 如何在扩展面板的正文中显示列表?
问题描述
我正在构建一个垫子扩展面板列表:
Widget _buildAccordion() {
return ExpansionPanelList(
expansionCallback: (int index, bool isExpanded) {
setState(() {
panels[index].isExpanded = !isExpanded;
});
},
children: panels.map<ExpansionPanel>((CalendarDayPanel panel) {
return ExpansionPanel(
canTapOnHeader: true,
headerBuilder: (BuildContext context, bool isExpanded) {
return ListTile(
title: Text(panel.calendarDay.dateString),
subtitle: Text('${panel.calendarDay.appointmentsNumber} rdv.'),
);
},
body: ListView(children: [
ListTile(title: Text("1st tile")),
ListTile(title: Text("2nd tile"))
]),
isExpanded: panel.isExpanded);
}).toList(),
);
}
我希望每个 ExpansionPanel 的主体都显示一个磁贴列表。但是,当我尝试展开面板时出现渲染错误。如果不是正文中的 ListView,我使用一个简单的 Text 小部件,它可以正常工作。
我应该怎么做才能在扩展面板的正文中显示一个列表?
记录的完整错误消息是:
RenderBox 未布置:RenderRepaintBoundary#e926c relayoutBoundary=up24 NEEDS-PAINT
更新
将正文更改为:
body: ListView(
shrinkWrap: true,
children: [
ListTile(title: Text("1st tile")),
ListTile(title: Text("2nd tile"))
],
),
仍然试图掌握这里的基本逻辑。
解决方案
Widget _buildAccordion() {
return ExpansionPanelList(
expansionCallback: (int index, bool isExpanded) {
setState(() {
panels[index].isExpanded = !isExpanded;
});
},
children: panels.map<ExpansionPanel>((CalendarDayPanel panel) {
return ExpansionPanel(
canTapOnHeader: true,
headerBuilder: (BuildContext context, bool isExpanded) {
return ListTile(
title: Text(panel.calendarDay.dateString),
subtitle: Text('${panel.calendarDay.appointmentsNumber} rdv.'),
);
},
body: Column(
children: <Widget>[
Expanded(
child: ListView(children: [
ListTile(title: Text("1st tile")),
ListTile(title: Text("2nd tile"))
]),
),
],
),
isExpanded: panel.isExpanded);
}).toList(),
);
}
上面的更改.. 将 ListView 包装为 Expanded 和 Expanded by Column。