在 Flutter 中展开时如何去除 ExpansionTile 的分隔线

Pau*_*ott 15 flutter

我的 Drawer 小部件中有一个 ExpansionTile。当我展开这个项目时,它会自动在上方和下方添加一条分隔线。我想要这些分隔线永久。

所以我想知道如何始终显示 ExpansionTile 的分隔线(展开和未展开),或者我可以添加我自己的分隔线并告诉 ExpansionTile 从不显示分隔线。

这可能吗?谢谢。

小智 30

您可以通过在 Theme Widget 中包裹 ExpansionTile 小部件来隐藏分隔线,

添加主题小部件后,您的代码将如下所示

Theme:(
     data: Theme.of(context).copyWith(dividerColor: Colors.transparent),
     child:ExpansionTile(
         title:...,
         children:[],
     ),
),
Run Code Online (Sandbox Code Playgroud)

检查这个Github 问题

  • 您如何始终显示问题中包含的分隔线? (3认同)
  • 非常短而甜蜜,谢谢! (2认同)

小智 24

另一种选择是,ExpansionTile您可以直接将形状传递给以下组件,而不用主题包装ExpansionTile小部件:

ExpansionTile(
  // ...
  shape: Border(),
)
Run Code Online (Sandbox Code Playgroud)

  • 这应该被标记为正确的解决方案!将分隔线颜色设置为透明的另一种解决方案不会删除分隔线,它仍然占用空间并在扩展时稍微移动扩展图块。 (3认同)

小智 6

@RJB,我遇到了同样的问题,我解决了用一列包装 ExpansionTile 的问题,如下所示:

Theme(
  data: Theme.of(context).copyWith(dividerColor: Colors.transparent),
  child: Column(
    children: [
      ExpansionTile(
        title: Text(
         'My title',
          style: const TextStyle(
            fontWeight: FontWeight.bold,
          ),
        ),
        trailing: Icon(
          _showContent
              ? Icons.expand_less_rounded
              : Icons.expand_more_rounded,
        ),
        onExpansionChanged: (bool expanded) {
          setState(() => _showContent = expanded);
        },
        children: <Widget>[
          Text('My content'),
        ],
      ),
      const Divider(
        color: Colors.amber,
        thickness: 1,
        height: 0,
      )
    ],
  ),
);
Run Code Online (Sandbox Code Playgroud)

我知道它不漂亮,但我找不到可以个性化其外观各个方面的扩展组件。