我正在尝试创建一个瓦片列表。我用过ListView.separated
。但它总是出错。
════════呈现库捕获到异常═════════════════════════════════RenderBox未布局:_RenderScrollSemantics#aa680 relayoutBoundary=up6 NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE'package:flatt/src/rendering/box.dart':包装:扑动/…/渲染/框。省道:1断言失败:行1982位置12:"hasSize">
════════呈现库捕获到异常═════════════════════════════════空值上使用的空检查运算符
这是代码
class _NewtilesState extends State<Newtiles> {
@override
Widget build(BuildContext context) {
return Container(
child: Expanded(
child: ListView(
children: [
ListView.separated(
itemBuilder: (BuildContext context, int index) {
return ListTile(
title: Text('Person $index'),
subtitle: Text("Your Message"),
trailing: Text("11:10 PM"),
);
},
separatorBuilder: (BuildContext context, int index) {
return Divider();
},
itemCount: 30)
],
),
),
);
}
}
问题的出现是因为您将一个没有shrinkWrap
的Scrollable
(ListView.separated
放入另一个Scrollable
-ListView
。在您的特定示例中,您应该跳过外部ListView
,将ListView.separated
直接放入Container
。
当您将Expanded
作为一个灵活小部件的直接子部件(因此Column
或Row
(,使其占用所有剩余空间时,它就起到了一定的作用。
您的Container
也是多余的,因为除了child
之外,您不向它传递任何参数。
如果你想在这样的列中有几个可变高度的小部件,你可能想把CustomScrollView
和SliverList
一起使用。
这应该有效:
return Container(
child: ListView.separated(
itemBuilder: (BuildContext context, int index) {
return ListTile(
title: Text('Person $index'),
subtitle: const Text("Your Message"),
trailing: const Text("11:10 PM"),
);
},
separatorBuilder: (BuildContext context, int index) {
return Divider();
},
itemCount: 30),
);
return Container(
child: Expanded(
child: ListView.separated(
shrinkWrap: true, // <--- add this line
itemBuilder: (BuildContext context, int index) {
return ListTile(
title: Text('Person $index'),
subtitle: Text("Your Message"),
trailing: Text("11:10 PM"),
);
},
separatorBuilder: (BuildContext context, int index) {
return Divider();
},
itemCount: 30),
),
);