我有一个像这样的小部件树:
SingleChildScrollView
Column
Container
ListView(or GridView)
问题是当我的小部件树如上时,它给我错误
需要油漆
所以我这样改变我的小部件树:
Column
Container
ListView(or GridView)
但是在这种情况下,ListView或GridView部分会分别滚动,我希望整个窗口小部件树都可以滚动。您如何看待我?
答案 0 :(得分:10)
正如其他答案所建议的那样,您可以通过设置shrinkWrap: true, physics: NeverScrollableScrollPhysics()
来做到这一点,但是构建收缩包装的列表视图比构建普通的列表视图更昂贵,我认为在上使用map()是一个好主意列表。
Column(
children: <Widget>[
...itemList.map((item) {
return Text(item);
}).toList(),
],
),
答案 1 :(得分:5)
为什么会发生?
发生这种情况是因为Column
和ListView
都分别占据了整个屏幕空间,这是默认行为。
如何解决问题?
要解决上述问题,我们必须禁用Listview的滚动,这可以通过shrinkWrap
和physics
属性来实现
shrinkWrap:true -它强制ListView仅占用所需的空间,而不是整个屏幕。
物理:NeverScrollableScrollPhysics()-它禁用了ListView的滚动功能,这意味着现在我们只有SingleChildScrollView提供滚动功能。
代码:
SingleChildScrollView
Column
Container
ListView(
shrinkWrap: true,
physics: NeverScrollableScrollPhysics(),
//...
)
注意:在ListView
以上的行为也将适用于GridView
。
答案 2 :(得分:4)
对我来说,将primary设置为false并将shrinkWrap设置为true即可。
ListView(
primary: false,
shrinkWrap: true,
),
答案 3 :(得分:2)
我正在使用嵌套的Listviews
,这对我有所帮助。将这些行添加到您所有的ListviewBuilders
ListView(
shrinkWrap: true,
primary: false,
),
答案 4 :(得分:1)
您可以使用第一个小部件树并应用以下更改:
ListView
和GridView
中设置shrinkWrap: true
。这样可以修复您在哪里得到的错误消息。ListView
和GridView
中设置physics: NeverScrollableScrollPhysics()
。这将禁用它们的滚动,而新的操作只能在SingleChildScrollView
答案 5 :(得分:1)
在您的primary
中将false
设置为ListView
。
ListView(
primary: false,
),
这应该防止它单独滚动。