在 Flutter 的垂直列表中添加动态高度水平列表视图

Posted

技术标签:

【中文标题】在 Flutter 的垂直列表中添加动态高度水平列表视图【英文标题】:Add dynamic height horizontal list-view inside vertical list in Flutter 【发布时间】:2019-06-26 02:42:12 【问题描述】:

我在垂直列表中添加水平列表视图。它没有显示任何内容

 @override
  Widget build(BuildContext context) 
    return Scaffold(
        body: new ListView.builder(
            itemCount: 3,
            scrollDirection: Axis.vertical,
            itemBuilder: (context, position) 
              if (position == 0) 
                return Container(
                  child: Text("First rwo"),
                );
               else if (position == 1) 
                return Container(
                  child: Text("second  rwo"),
                );
               else if (position == 2) 
                return Container(
                    child: ListView.builder(
                        scrollDirection: Axis.horizontal,
                        itemCount: 4,
                        shrinkWrap: true,
                        itemBuilder: (context, pos) 
                          return Text("List ");
                        ));
              
            ));
  

当我将 height 属性添加到位置 2 container 时,它可以工作。 但我想要动态高度。

SingleChildScrollView 是另一种选择,但它不适合无限列表。

【问题讨论】:

将水平 ListView 放置在垂直 ListView 适配器中。为水平列表膨胀布局。以后别忘了设置适配器。 @VipiNNegi 它在 Flutter 兄弟中 抱歉没有在标签中看到。应该在问题或标题中提及。 【参考方案1】:

SingleChildScrollview 内切换到Row

  @override
  Widget build(BuildContext context) 
    return Scaffold(
      body: new ListView.builder(
        itemCount: 3,
        scrollDirection: Axis.vertical,
        itemBuilder: (context, position) 
          if (position == 0) 
            return Container(
              child: Text("First rwo"),
            );
           else if (position == 1) 
            return Container(
              child: Text("second  rwo"),
            );
           else if (position == 2) 
            return SingleChildScrollView(
              scrollDirection: Axis.horizontal,
              child: Row(
                children: [Text("List"), Text("List"), Text("List"), Text("List")],
              ),
            );
          
        ,
      ),
    );
  

【讨论】:

但是 SingleChildScrollView 不适合无限水平列表。 但是Flutter框架没有办法在不构建每个孩子的情况下计算高度。所以你要么拥有固定高度的无限水平滚动视图,要么拥有固定长度的动态高度水平滚动视图,你不能同时拥有它。 如果您有很多项目(大列表),此解决方案将非常滞后。 :((

以上是关于在 Flutter 的垂直列表中添加动态高度水平列表视图的主要内容,如果未能解决你的问题,请参考以下文章

如何使用下面的类从web服务中动态读取下面给出的JSON数据,并为收到的数据创建水平列表视图。

在垂直列表视图中颤动动态高度水平列表视图

Flutter - 将包装内容设置为垂直滚动列表视图

我们如何在不使用 recyclerview 的情况下创建水平列表视图?

在ListView中动态更新列表元素高度

flutter学习ListView