【问题标题】:Using both horizontal and vertical listview.builder on a page in flutter在颤动的页面上同时使用水平和垂直 listview.builder
【发布时间】:2021-11-03 09:53:55
【问题描述】:

在我的应用程序中,我想在主屏幕上水平和垂直显示两种不同的产品。但我想用 ListView.Builder 来做这件事,因为它们都是列表。我找不到这个的正确用法,你能帮忙吗?

SingleChildScrollView(
                    child: Column(
                      mainAxisSize: MainAxisSize.min,
                      children: <Widget>[
                        SizedBox(
                          height: 200.0,
                          child: ListView.builder(
                            physics: ClampingScrollPhysics(),
                            shrinkWrap: true,
                            scrollDirection: Axis.horizontal,
                            itemCount: 25,
                            itemBuilder: (BuildContext context, int index) =>
                                Card(
                              child: Center(child: Text('Horizontal List Child')),
                            ),
                          ),
                        ),
                        ListView.builder(
                          itemCount: 10,
                          shrinkWrap: true,
                          scrollDirection: Axis.vertical,
                          itemBuilder: (context, index) {
                            return Expanded(
                              child: Card(
                                  child:
                                      Center(child: Text('Vertical List Child'))),
                            );
                          },
                        )
                      ],
                    ),
                  ),

我可以不使用 ListView.builder 做到这一点,但我需要使用 ListView.builder。垂直部分的高度应该等于里面的元素。

【问题讨论】:

    标签: flutter listview


    【解决方案1】:

    您必须定义任何滚动视图的高度。我更喜欢水平滚动视图

          SingleChildScrollView(
              child: Column(
                children: [
                  Container(
                    height: 150,
                    child: ListView.builder(
                      physics: ClampingScrollPhysics(),
                      shrinkWrap: true,
                      scrollDirection: Axis.horizontal,
                      itemCount: 25,
                      itemBuilder: (BuildContext context, int index) {
                        ...
                        ...
                        ...
                      },
                    ),
                  ),
                  ListView.builder(
                    itemCount: 10,
                    shrinkWrap: true,
                    scrollDirection: Axis.vertical,
                    itemBuilder: (context, index) {
                      ...
                      ...
                      ...
                    },
                  ),
                ],
              )
          )
    

    【讨论】:

    • 感谢您的回复,但我不断收到 hasSize 错误。
    【解决方案2】:

    扩展使里面的物品变成全身。 只需将其删除,高度即可使项目高度等于卡片

        ListView.builder(
        itemCount: 10,
        shrinkWrap: true,
        scrollDirection: Axis.vertical,
        itemBuilder: (context, index) {
               return Card(
                   child: Center(child: Text('Vertical List 
        Child')
           )
         );
       },
     )
    

    【讨论】:

    • 经过我的尝试,实际上扩展卡在那里。我通常不会那样使用它,而且它不像你说的那样工作。
    【解决方案3】:

    删除 SingleChildScrollView。 将 Expanded 作为父级添加到第二个 ListView。 从卡中删除扩展

    【讨论】:

      【解决方案4】:
      Scaffold(
            body: SafeArea( //in case you dont have appbar
              child: CustomScrollView(
                physics: const BouncingScrollPhysics(),
                slivers: [
                  
                  const SliverToBoxAdaptar(child:Container(child:ListView(...)))// horizontalList
                  const SliverList()// verticalSliverList
                ],
              ),
            ),
          );
      

      试试这个

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-06
      • 2019-07-15
      • 2020-05-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多