Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/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_Flutter Layout - Fatal编程技术网

Flutter 如何在颤振中创建完全水平滚动的垂直列表

Flutter 如何在颤振中创建完全水平滚动的垂直列表,flutter,flutter-layout,Flutter,Flutter Layout,我需要一个垂直列表,其中的元素超出了显示的宽度,类似于宽颤振数据表。所以我想让垂直滚动列表也可以水平滚动。这样做的方法似乎是将列表放在SingleChildScrollView中 SingleChildScrollView(child: listview, scrollDirection: Axis.horizontal); 。。。这是可行的,但如果listview包含一行作为元素,则显然不行: Row( mainAxisAlignment: MainAxisAlignment

我需要一个垂直列表,其中的元素超出了显示的宽度,类似于宽颤振数据表。所以我想让垂直滚动列表也可以水平滚动。这样做的方法似乎是将列表放在SingleChildScrollView中

   SingleChildScrollView(child: listview, scrollDirection: Axis.horizontal);
。。。这是可行的,但如果listview包含一行作为元素,则显然不行:

 Row(
    mainAxisAlignment: MainAxisAlignment.start,
    crossAxisAlignment: CrossAxisAlignment.start,
    mainAxisSize: MainAxisSize.min,
    children: children.toList());
我不明白为什么这是一个问题,因为由于MainAxisSize.min,这种行的宽度应该是有限的

可以在SingleChildScrollView中包装每个列表元素,但这只会导致单个元素可滚动

我不能在SingleChildScrollView中使用Datatable,因为它不支持可变大小的单元格高度


您可以尝试使用容器包装可滚动小部件,并将其高度和宽度设置为设备的大小:

Container(
  height: MediaQuery.of(context).size.height,
  width: MediaQuery.of(context).size.width,
  child: yourVerticallyOrHorizontallyScrollableWidget
)

是的,您可以,但是使用2个SingleChildScrollView并确保其中没有ListView

     SingleChildScrollView(
        scrollDirection: Axis.vertical,
        child: SingleChildScrollView(
          scrollDirection: Axis.horizontal,
          child: Column(
            children: [ 
            \\ Your widgets
            ],
          ),
        ),
      ),
更新

如果您想像在评论中所说的那样使用ListView.builder,您应该做两件事:

1-为listView添加此属性:

physics: NeverScrollableScrollPhysics()
2-将listview添加到任何应该具有宽度和高度的小部件中。这个宽度应该大于屏幕的宽度

这是密码

@override
  Widget build(BuildContext context) {
    return SafeArea(
      child: new Scaffold(
        body: SingleChildScrollView(
          scrollDirection: Axis.horizontal,
          child: SingleChildScrollView(
            scrollDirection: Axis.vertical,
            child: Container(
              width: MediaQuery.of(context).size.width * 1.8,
              height: MediaQuery.of(context).size.height,
              child: ListView.builder(
                  physics: NeverScrollableScrollPhysics(),
                  scrollDirection: Axis.vertical,
                  itemCount: 24,
                  shrinkWrap: false,
                  itemBuilder: (context, i) {
                    return Padding(
                      padding: const EdgeInsets.all(8.0),
                      child: Column(
                          crossAxisAlignment: CrossAxisAlignment.start,
                          children: [
                            Text(
                                "AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA"),
                            Text(
                                "BBB BBB BBB BBB BBB BBB BBB BBB BBB BBB BBB BBB BBB BBB BBB BBB BBB BBB BBB"),
                            Text(
                                "XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX"),
                          ]),
                    );
                  }),
            ),
          ),
        ),
      ),
    );
  }

你能用代码分享长列表的错误吗?它要求列表中的所有项目都一次呈现。ListView的最大好处是它可以处理数十万个元素,并将可见元素添加到渲染树中。请参阅ListView.Builder宽度*1.8的处理方法是什么?它会限制列表的长度-您永远无法向下滚动大列表。我认为,对于ListView来说,将列表包装成一个垂直的可滚动列表并不能解决这个问题,因为您删除了列表管理屏幕外小部件可见性的功能。
     SingleChildScrollView(
        scrollDirection: Axis.vertical,
        child: SingleChildScrollView(
          scrollDirection: Axis.horizontal,
          child: Column(
            children: [ 
            \\ Your widgets
            ],
          ),
        ),
      ),
physics: NeverScrollableScrollPhysics()
@override
  Widget build(BuildContext context) {
    return SafeArea(
      child: new Scaffold(
        body: SingleChildScrollView(
          scrollDirection: Axis.horizontal,
          child: SingleChildScrollView(
            scrollDirection: Axis.vertical,
            child: Container(
              width: MediaQuery.of(context).size.width * 1.8,
              height: MediaQuery.of(context).size.height,
              child: ListView.builder(
                  physics: NeverScrollableScrollPhysics(),
                  scrollDirection: Axis.vertical,
                  itemCount: 24,
                  shrinkWrap: false,
                  itemBuilder: (context, i) {
                    return Padding(
                      padding: const EdgeInsets.all(8.0),
                      child: Column(
                          crossAxisAlignment: CrossAxisAlignment.start,
                          children: [
                            Text(
                                "AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA"),
                            Text(
                                "BBB BBB BBB BBB BBB BBB BBB BBB BBB BBB BBB BBB BBB BBB BBB BBB BBB BBB BBB"),
                            Text(
                                "XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX"),
                          ]),
                    );
                  }),
            ),
          ),
        ),
      ),
    );
  }