31

我已经按照本教程完全实现了水平滚动列表。现在,我想做的是创建一个垂直列表,其中每一行都是一个水平列表。

我尝试了不同的方法,但我一直认为应该可以简单地将水平列表设置为垂直列表的子级,但它不起作用。

我的代码是:

Widget build(BuildContext context) {
return new Scaffold(
  
  body: Container(
      margin: EdgeInsets.symmetric(vertical: 20.0),
      height: 160.0,
      child: ListView(
        children: <Widget>[
          Text("First line"),
          HorizontalList(),
          Text("Second line"),
          HorizontalList()
        ],
      )
  ),

  drawer: new MyNavigationDrawer(),
);

}

我也尝试将各种水平列表放在 ListTiles 中,但结果是一样的。

4

2 回答 2

61

我猜您想要的是另一个列表中的列表这是您遵循的示例程序的改编构建方法如下:

 Widget build(BuildContext context) {
    Widget horizontalList1 = new Container(
      margin: EdgeInsets.symmetric(vertical: 20.0),
      height: 200.0,
      child: new ListView(
      scrollDirection: Axis.horizontal,
      children: <Widget>[
        Container(width: 160.0, color: Colors.red,),
        Container(width: 160.0, color: Colors.orange,),
        Container(width: 160.0, color: Colors.pink,),
        Container(width: 160.0, color: Colors.yellow,),
      ],
    )
    );
    Widget horizontalList2 = new Container(
        margin: EdgeInsets.symmetric(vertical: 20.0),
        height: 200.0,
        child: new ListView(
      scrollDirection: Axis.horizontal,
      children: <Widget>[
        Container(width: 160.0, color: Colors.blue,),
        Container(width: 160.0, color: Colors.green,),
        Container(width: 160.0, color: Colors.cyan,),
        Container(width: 160.0, color: Colors.black,),
      ],
    )
    );
    return new Scaffold(
      appBar: new AppBar(
        title: new Text(widget.title),
      ),
      body: new Center(
        child: new Container(
          child: ListView(
            scrollDirection: Axis.vertical,
            children: <Widget>[
              horizontalList1,
              horizontalList2,
            ],
          ),
        ),
      ), // This trailing comma makes auto-formatting nicer for build methods.
    );

结果是这样的:

在此处输入图像描述

希望能帮助到你

于 2018-06-28T19:18:14.523 回答
4

截屏:

在此处输入图像描述


比方说,这是你的水平ListView

ListView _horizontalList(int n) {
  return ListView(
    scrollDirection: Axis.horizontal,
    children: List.generate(
      n,
      (i) => Container(
        width: 50,
        color: Colors.accents[i % 16],
        alignment: Alignment.center,
        child: Text('$i'),
      ),
    ),
  );
}

您可以将它放在 aListView或 aColumn中。

  • 在一个ListView

    将您的水平列表包装在 a 中SizedBox并提供固定高度。

    ListView(
      children: [
        SizedBox(
          height: 50,
          child: _horizontalList(8),
        ),
        SizedBox(
          height: 50,
          child: _horizontalList(12),
        ),
        SizedBox(
          height: 50,
          child: _horizontalList(16),
        ),
      ],
    )
    
  • 在一个Column

    您还可以使用Expanded/Flexible小部件。

    Column(
      children: [
        SizedBox(
          height: 50,
          child: _horizontalList(8),
        ),
        Expanded(
          child: _horizontalList(12),
        ),
        Flexible(
          child: _horizontalList(16),
        ),
      ],
    )
    
于 2021-08-17T15:28:04.330 回答