Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 颤振:集装箱+;列表视图可滚动_Flutter_Dart - Fatal编程技术网

Flutter 颤振:集装箱+;列表视图可滚动

Flutter 颤振:集装箱+;列表视图可滚动,flutter,dart,Flutter,Dart,我有一个带有容器+列表视图的页面。现在listView是可滚动的,但我希望整个页面是可滚动的。(因此,如果用户滚动,容器将“消失”) 列( 儿童:[ 容器( 颜色:颜色。白色。不透明度(0.95), 宽度:400, 身高:400, 子项:文本(“”), 列表视图( 儿童:员额, ), ], ), 这是否可能,如何实现 谢谢 您可以使用SingleChildScrollView 以下是一个例子: SingleChildScrollView( // <- added child: C

我有一个带有容器+列表视图的页面。现在listView是可滚动的,但我希望整个页面是可滚动的。(因此,如果用户滚动,容器将“消失”)

列(
儿童:[
容器(
颜色:颜色。白色。不透明度(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]; 
          },
        );
      }