Flutter 颤振:集装箱+;列表视图可滚动
我有一个带有容器+列表视图的页面。现在listView是可滚动的,但我希望整个页面是可滚动的。(因此,如果用户滚动,容器将“消失”)Flutter 颤振:集装箱+;列表视图可滚动,flutter,dart,Flutter,Dart,我有一个带有容器+列表视图的页面。现在listView是可滚动的,但我希望整个页面是可滚动的。(因此,如果用户滚动,容器将“消失”) 列( 儿童:[ 容器( 颜色:颜色。白色。不透明度(0.95), 宽度:400, 身高:400, 子项:文本(“”), 列表视图( 儿童:员额, ), ], ), 这是否可能,如何实现 谢谢 您可以使用SingleChildScrollView 以下是一个例子: SingleChildScrollView( // <- added child: C
列(
儿童:[
容器(
颜色:颜色。白色。不透明度(0.95),
宽度:400,
身高:400,
子项:文本(“”),
列表视图(
儿童:员额,
),
],
),
这是否可能,如何实现
谢谢 您可以使用
SingleChildScrollView
以下是一个例子:
SingleChildScrollView( // <- added
child: Column(
children: <Widget>[
Container(
color: Colors.white.withOpacity(0.95),
width: 400,
height: 400,
child: Text("")),
ListView(
shrinkWrap: true, // <- added
primary: false, // <- added
children: posts,
),
],
),
);
SingleChildScrollView(//使用SingleChildScrollView,然后使用具有硬编码容器高度的容器,然后使用列表视图生成器,这应该可以解决您的问题。有多种方法可以实现您的目标。唯一的问题是,如果您有大量的文章,则当“包覆面提取”设置为true时,具有子文章的listview将需要时间来计算其内容所需高度,因此必须填充其所有子项
首先
ListView(
儿童:[
容器(
颜色:颜色。白色。不透明度(0.95),
宽度:400,
身高:400,
子项:文本(“”),
列表视图(
物理学:NeverscrollableScroll物理学(),
主要:错误,
收缩膜:对,
儿童:员额,
),
),
],
),
第二
SingleChildScrollView(
child: Column(
children: <Widget>[
Container(
color: Colors.white.withOpacity(0.95),
width: 400,
height: 400,
child: Text("")),
ListView(
physics: NeverScrollableScrollPhysics(),
shrinkWrap: true,
primary: false,
children: posts,
),
],
),
),
SingleChildScrollView(
子:列(
儿童:[
容器(
颜色:颜色。白色。不透明度(0.95),
宽度:400,
身高:400,
子项:文本(“”),
列表视图(
物理学:NeverscrollableScroll物理学(),
收缩膜:对,
主要:错误,
儿童:员额,
),
],
),
),
我尝试了以下方法:
SingleChildScrollView(
child: Container(
height: 1000,
width: 400,
child: ListView(
children: <Widget>[
Container(
color: Colors.white.withOpacity(0.95),
width: 400,
height: 400,
child: Text("")),
ListView(
children: posts,
),
],
),
),
),
SingleChildScrollView(
子:容器(
身高:1000,
宽度:400,
子:ListView(
儿童:[
容器(
颜色:颜色。白色。不透明度(0.95),
宽度:400,
身高:400,
子项:文本(“”),
列表视图(
儿童:员额,
),
],
),
),
),
这是可行的,但我希望容器具有动态的高度和宽度?可能吗?谢谢
如果不使用Column并使用ListView.builder
和
根据索引显示小部件
例如,在0索引上显示容器
这样,您就不必使用任何不同的小部件进行滚动
根据您的要求,容器将滚动列表
这样,就不可能出现任何溢出错误
就像您在使用列时得到的一样
ListView.builder的另一个优点是,您的帖子将被延迟创建,这是在Flatter中创建ListView的有效方法。无论您有多少帖子,您的UI都不会延迟
这在一开始可能看起来像是一个黑客,但根据您的要求,容器也必须能够被滚动,这个解决方案对我来说是有意义的,因为容器可以被视为列表的第一个元素
让我知道它是否适合你
以下是工作代码,供您参考:
@override
Widget build(BuildContext context) {
return ListView.builder(
itemCount: posts.length + 1, // +1 because you are showing one extra widget.
itemBuilder: (BuildContext context, int index) {
if (index == 0) {
return Container(
color: Colors.white.withOpacity(0.95),
width: 400,
height: 400,
child: Text(""));
}
int numberOfExtraWidget = 1; // here we have 1 ExtraWidget i.e Container.
index = index - numberOfExtraWidget; // index of actual post.
return posts[index];
},
);
}
我希望这对您有效,如果有任何疑问,请发表评论。为什么不使用“谢谢”,当我这样做时,我得到了一个错误:底部的RenderFlex溢出1232像素。谢谢,它确实有效,但有没有一个选项可以获得一个灵活的容器?@Karelbedts u可以使用mediaquery设置容器的尺寸。这会给它一些帮助灵活性。但除此之外,我认为thete不是一个好方法。谢谢,使用解决方案1时,我有一个错误:垂直视口的高度是无限的。使用解决方案2时,我有一个错误:底部的RenderFlex溢出1232个像素。您不必使用高度为1000的容器。请参阅我的答案:
SingleChildScrollView(
child: Container(
height: 1000,
width: 400,
child: ListView(
children: <Widget>[
Container(
color: Colors.white.withOpacity(0.95),
width: 400,
height: 400,
child: Text("")),
ListView(
children: posts,
),
],
),
),
),
@override
Widget build(BuildContext context) {
return ListView.builder(
itemCount: posts.length + 1, // +1 because you are showing one extra widget.
itemBuilder: (BuildContext context, int index) {
if (index == 0) {
return Container(
color: Colors.white.withOpacity(0.95),
width: 400,
height: 400,
child: Text(""));
}
int numberOfExtraWidget = 1; // here we have 1 ExtraWidget i.e Container.
index = index - numberOfExtraWidget; // index of actual post.
return posts[index];
},
);
}