Widget build(BuildContext context) {
return Scaffold(
backgroundColor: const Color(0xFFE6E6E6),
body: SingleChildScrollView(
child: SafeArea(
child: Column(
children: [
ListView.builder(
scrollDirection: Axis.horizontal,
shrinkWrap: true,
itemCount: iconList.length,
itemBuilder: (BuildContext context, int index) {
return Row(
children: [iconList[index]],
);
},
),
const SizedBox(
height: 50,
),
请注意,在小部件树中有两个可滚动的小部件,SingleChildScrollView
和ListView.builder
,SingleChildScrollView
可以设置为水平滚动,不要忘记垂直对齐的列是它的子级。
如果你想要水平滚动的东西,你需要一个用SingleChildScrollView
和scrollDirection: Axis.horizontal
包装的Row
,listView
也是如此
另一个注意事项:就像我说的,你有可滚动的小部件,所以最好考虑不要使用ListView
,因为您使用了SingleChildScrollView
,而是可以使用List.generate((方法:根据索引生成小部件
SingleChildScrollView(
scrollDirection: Axis.horizontal,
child: Row(
children: <Widget>[
// your other Widgets
...List.generate(iconList.length, (index) => YourWidgetExample(index)
),
],
)
考虑一下我是否在代码中犯了任何写错误,因为我直接在Stackoverflow编辑器中写
希望它能帮助
每当您试图在Column小部件内使用水平ListView时,都要基于ItemBuilder 提供固定的高度
child: Column(
mainAxisSize: MainAxisSize.max,
children: [
SizedBox(
height: 200,
child: ListView.builder(
scrollDirection: Axis.horizontal,
itemCount: 22,
itemBuilder: (BuildContext context, int index) {
return Row(
mainAxisSize: MainAxisSize.min,
children: [Text("Item $index")],
);
},
),
),
],
),
或者你可以用SingleChildScrollView
关注Gwyyy的帖子
SingleChildScrollView(
child: Row(
children: [
for (int index = 0; index < itemLength; index++)
Text("Item $index")
],
),
),
您可以检查无边界高度/宽度|解码Flutter
您可以通过在listview
上设置primary:false
并将listview
包装到IntrinsicHeight
小部件中来解决此问题。
但我还没有测试过。