颤动 - 在列表视图构建器中滚动列表视图

Posted

技术标签:

【中文标题】颤动 - 在列表视图构建器中滚动列表视图【英文标题】:flutter - scrolling listview inside listview builder 【发布时间】:2019-04-08 09:38:16 【问题描述】:

我有一个“过滤器”,下面是足球比赛的列表。我用 ListView 包装“过滤器和”listview builder”(以便解决 blablabla 下的重载写入问题)。但是当你正常滚动时会出现一些奇怪的情况。滚动到不起作用的列表。只有“发光效果”,但我从上面的“过滤器菜单”滚动,滚动工作。如何让滚动正常运行?

我截取的代码:

Widget _buildListView(FixtureModel model, BuildContext context) 
    return Container(
        child: model.getFixturesCount() == 0
            ? Center(child: Text('No fixtures found'))
            : ListView(
                shrinkWrap: true,
                children: <Widget>[
                  Column(
                    children: <Widget>[
                      Row(
                        mainAxisAlignment: MainAxisAlignment.spaceBetween,
                        children: <Widget>[
                          Container(
                              padding: EdgeInsets.only(left: 10.0),
                              child: InkWell(
                                onTap: () => _onTap(context),
                                child: Container(
                                    margin:
                                        EdgeInsets.only(top: 5.0, bottom: 5.0),
                                    child: Row(
                                      children: <Widget>[
                                        Container(
                                            padding: EdgeInsets.only(left: 5.0),
                                            child:
                                                Icon(FontAwesomeIcons.github)),
                                        Container(
                                          padding: EdgeInsets.only(left: 15.0),
                                          child: Text(
                                            'Liga Premier Inggris',
                                            style: TextStyle(
                                                fontSize: 16.0,
                                                fontWeight: FontWeight.w500),
                                          ),
                                        ),
                                        Container(
                                            padding: EdgeInsets.only(
                                                left: 5.0, top: 2.0),
                                            child: Icon(Icons.arrow_drop_down,
                                                size: 17.0))
                                      ],
                                    )),
                              )),
                          Container(
                            padding: EdgeInsets.only(top: 3.0),
                            child: Text(
                              '4',
                              style:
                                  TextStyle(fontSize: 13.0, color: Colors.grey),
                            ),
                          ),
                          IconButton(
                              iconSize: 20.0,
                              icon: Icon(
                                FontAwesomeIcons.calendarAlt,
                                color: Colors.blue,
                              ),
                              onPressed: () )
                        ],
                      ),
                      Divider(
                        height: 0.0,
                      ),
                      Container(
                          padding: EdgeInsets.only(top: 2.0),
                          child: ListView.builder(
                            shrinkWrap: true,
                            itemCount: model.fixtureList == null
                                ? 0
                                : model.getFixturesCount(),
                            itemBuilder: (context, int i) 
                              var fixture = model.fixtureList[i];

                              return FixtureListItem(fixture: fixture);
                            ,
                          ))
                    ],
                  )
                ],
              ));
  

【问题讨论】:

在你的 ListView -add shrinkWrap: true, Physics: NeverScrollableScrollPhysics() @anmol.majhail 您好,先生,希望您状况良好。这个***.com/questions/53293164/…你明白我的问题吗? 是的,您需要使选项卡栏数据持久化 - 对于 - DetailMatchTab(widget.fixture) 类使用 AutomaticKeepAliveClientMixin ,评论文章就是一个很好的例子 - medium.com/@diegoveloper/… class _DetailMatchTabState 使用 AutomaticKeepAliveClientMixin 扩展 State @anmol.majhail 是的,我补充说之前看到pastebin.com/5wENUb1j 【参考方案1】:

在您的 ListView 中添加:

shrinkWrap: true,
physics: NeverScrollableScrollPhysics(),

从 ListView 中取出过滤器:remove physics: NeverScrollableScrollPhysics(), then in ListView

body: Column(
                  children: <Widget>[
                     Filter(),
                     Expanded(
                        child: ListView()
                     ),
                ]
            )

【讨论】:

哇...酷,感谢您的帮助。一件事,当滚动只是一个移动的列表时,“过滤器”是否有可能直立? 是的,将过滤器移出 ListView,在第 1 列小部件中 - 过滤器 2nd Listview。正文:列子项:[Filter(),Expanded (ListView())] 我用代码更新了答案 好兄弟..你救了我的命,非常有帮助。 @Muhammad - 稍后将在外面检查为 m。 (y) 我让它透明,一个小布局让它看起来堆叠在 sliverlist 和 sliverappbar 上。谢谢谢谢楼主,

以上是关于颤动 - 在列表视图构建器中滚动列表视图的主要内容,如果未能解决你的问题,请参考以下文章

在列表视图之外使用鼠标颤动 Web 滚动视图

自定义滚动谷歌颤动中的水平列表视图

在颤动中滚动列表视图时剪辑填充

如何在颤动的列表视图中嵌套列表视图?

以编程方式防止滚动列表视图颤动

如何通过颤动列表视图中的索引号滚动到索引?