我想创建一个可扩展的画廊,该画廊具有一个图像作为主图像,单击它时,我想扩展画廊并在主图像下方显示少量图像。 因此,我创建了一个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-扩展)。我想删除第一张图片周围的白线。
答案 0 :(得分:2)
否,不可能。此小部件使用 ListTile ,如果存在尾部小部件,则它会增加16px的间距(_horizontalTitleGap常数)。问题在于,即使您传递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,
),
);
}
),