可以在Flutter中用图像填充ExpansionTile标题吗?

时间:2019-11-18 13:27:27

标签: android ios flutter mobile dart

我想创建一个可扩展的画廊,该画廊具有一个图像作为主图像,单击它时,我想扩展画廊并在主图像下方显示少量图像。 因此,我创建了一个ListView,它具有一个返回ListTileTheme的构建器,该构建器用于删除带有子级ExpansionTile的contentPadding,但容器中仍留有一些填充。 知道如何完全填充ExpansionTile吗?我尝试了在网上看到的其他方法,但到目前为止还没有解决方案。

这是我的代码:

Container _getGallery() {
    Container container = new Container(
      height: 500.0,
      child: new ListView.builder(itemCount: 1, itemBuilder: (context, i)
      {
        ListTileTheme tileTheme = new ListTileTheme(
          contentPadding: EdgeInsets.all(0.0),
          child: ExpansionTile(
            trailing: Container(
              height: 0.0,
              width: 0.0,
            ),
            backgroundColor: Colors.transparent,
            title: Image.asset("assets/images/onboarding2.png",
                height: 200.0,
                width: double.infinity,
                alignment: Alignment.center,
                fit: BoxFit.cover,
            ),
            children: <Widget>[
              new Column(
                children: _buildExpandableContent(),
              ),
            ],
          ),
        );
        return tileTheme;
      }),
    );
    return container;
  }

在这里您可以看到我到目前为止所取得的成就(1-不扩展,2-扩展)。我想删除第一张图片周围的白线。

enter image description here enter image description here

1 个答案:

答案 0 :(得分:2)

否,不可能。此小部件使用 ListTile ,如果存在尾部小部件,则它会增加16px的间距(_horizo​​ntalTitleGap常数)。问题在于,即使您传递null,在 ExpansionTile 中总会有尾随小部件:

trailing: widget.trailing ?? RotationTransition(
  turns: _iconTurns,
  child: const Icon(Icons.expand_more),
),

我可以建议的唯一肮脏的解决方法是使用比例转换来补偿这16px的间隙:

title: LayoutBuilder(
  builder: (context, constraints) {
    final newScale = 1.0 + 16.0 / constraints.maxWidth;

    return Container(
      transform: Matrix4.identity()..scale(newScale),
      child: Image.asset("assets/images/onboarding2.png",
          height: 200.0,
          width: double.infinity,
          alignment: Alignment.center,
          fit: BoxFit.cover,
      ),
    );
  }
),

enter image description here