答案 0 :(得分:1)
对于原始海报来说可能为时已晚,但也许会帮助其他人寻找它:
我为此找到的最佳解决方案(不求助于手动管理的堆栈)是使用高度因子小于1的Align widget。这将导致下一项与上一项重叠。
以下是完成这项工作的关键要素:
final elements = ['A', 'B', 'C'];
final padExtend = 16.0;
final media = MediaQuery.of(context);
return ListView.builder(
itemCount: elements.length,
itemBuilder: (BuildContext context, int index) {
final String content = elements[index];
return Align(
child: Container(
width: media.size.width - padExtend / 2.0,
padding: EdgeInsets.all(padExtend),
decoration: BoxDecoration(
boxShadow: [
BoxShadow(color: Colors.grey, spreadRadius: 3, blurRadius: 3, offset: Offset(2, 1)),
],
color: Colors.white,
),
child: Text(content),
),
alignment: Alignment.topCenter,
heightFactor: 0.9,
);
},
);
由于align将元素居中,因此使用媒体查询来设置固定宽度。
答案 1 :(得分:0)
用 OverflowBox
包裹您的元素并赋予 maxHeight
值将实现此效果。
return SizedBox(
height: 35, //--> list children will be 35 in height
child: OverflowBox(
maxHeight: 50, // --> allowing the child to overflow will cause overlap between elements
child: Container(
height: 50,
child: Text((index + 1).toString()),
),
),
);
答案 2 :(得分:-1)
您可以使用elevation
和padding
顶部来达到想要的效果:
ListView.builder(
itemCount: 5,
itemBuilder: (BuildContext content, int index) {
return Padding(
padding: const EdgeInsets.only(top: 8.0),
child: Material(
elevation: 5.0,
child: new Container(
height: 100.0,
),
),
);
})
如果您想重叠商品,只需使用高度系数低于1.0的
return Align(
alignment: Alignment.topLeft,
heightFactor: 0.9,
child: your item...