Flutter 如何在ListView中重叠项目?
我想在每个项目上都有一个阴影,每个项目都应该与下一个兄弟项目的顶部重叠Flutter 如何在ListView中重叠项目?,flutter,flutter-layout,Flutter,Flutter Layout,我想在每个项目上都有一个阴影,每个项目都应该与下一个兄弟项目的顶部重叠 您可以使用立面和填充顶部来达到您想要的效果: ListView.builder( itemCount: 5, itemBuilder: (BuildContext content, int index) { return 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...
您可以使用
立面
和填充
顶部来实现您想要的效果:
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...
对于原始海报来说可能已经太晚了,但也许它会帮助其他人寻找: 我找到的解决这个问题的最佳方案(无需求助于手动管理的堆栈)是使用高度因子小于1的。这将导致下一项与上一项重叠 以下是实现这一目标的关键要素:
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,
);
},
);
由于对齐将使元素居中,因此使用媒体查询来设置固定宽度。对于原始海报来说可能已经太晚了,但它可能会帮助其他人查找: 我找到的解决这个问题的最佳方案(无需求助于手动管理的堆栈)是使用高度因子小于1的。这将导致下一项与上一项重叠 以下是实现这一目标的关键要素:
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,
);
},
);
由于对齐将使元素居中,因此使用媒体查询来设置固定宽度。使用
溢出框
包装元素并给出最大高度
值将实现此效果
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()),
),
),
);
使用
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()),
),
),
);
这只是在项目之间添加一个阴影。请阅读问题。这只是在项目之间添加一个阴影。请读问题。