首页 > 解决方案 > 如何在扩展面板的正文中显示列表?

问题描述

我正在构建一个垫子扩展面板列表:

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"))
          ],
      ),

仍然试图掌握这里的基本逻辑。

标签: 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: 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。


推荐阅读