为什么如果我将滚动方向更改为轴.水平,它不起作用?


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,
),

请注意,在小部件树中有两个可滚动的小部件,SingleChildScrollViewListView.builderSingleChildScrollView可以设置为水平滚动,不要忘记垂直对齐的列是它的子级。

如果你想要水平滚动的东西,你需要一个用SingleChildScrollViewscrollDirection: Axis.horizontal包装的RowlistView也是如此

另一个注意事项:就像我说的,你有可滚动的小部件,所以最好考虑不要使用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小部件中来解决此问题。

但我还没有测试过。

最新更新