【问题标题】:How to display a list in the body of an expansion panel?如何在扩展面板的正文中显示列表?
【发布时间】:2021-03-08 04:15:18
【问题描述】:

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

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 需要-PAINT

更新

将正文更改为:

body: ListView(
          shrinkWrap: true,
          children: [
            ListTile(title: Text("1st tile")),
            ListTile(title: Text("2nd tile"))
          ],
      ),

这里还在尝试掌握底层逻辑。

【问题讨论】:

    标签: flutter


    【解决方案1】:
    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。

    【讨论】:

    • 试过这个没有成功。但是,将 shrinkWrap 添加到列表中是有效的。仍然不明白为什么。
    猜你喜欢
    • 2018-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-28
    • 2010-12-14
    • 1970-01-01
    • 2017-06-08
    • 2021-07-21
    相关资源
    最近更新 更多