简体   繁体   English

将 scrollDirection 设置为 Axis.horizontal 时 ListView.builder 引发 RedorBox 错误

[英]ListView.builder throwing RedorBox error when setting scrollDirection to Axis.horizontal

I am using a ListView.builder and a Gridview.builder and need to make ListView horizontal but when I set its scrollDirection property it throws error (picture attached) [![enter image description here][1]][1]我正在使用ListView.builderGridview.builder并且需要使ListView水平但是当我设置它的scrollDirection属性时它会抛出错误(附图片)[![在此处输入图像描述][1]][1]

import 'package:flutter/material.dart';

class MenuPage extends StatefulWidget {
  @override
  _MenuPageState createState() => _MenuPageState();
}

class _MenuPageState extends State<MenuPage> {
  List<String> litems = ["Hello", "how"];
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: SingleChildScrollView(
        physics: ScrollPhysics(),
        child: Column(
          children: <Widget>[
            ListView.builder(
                scrollDirection: Axis.horizontal,
                physics: NeverScrollableScrollPhysics(),
                shrinkWrap: true,
                padding: EdgeInsets.all(8),
                itemCount: 18,
                itemBuilder: (context, index) {
                  return CategoryButton(title: "title");
                }),
            GridView.builder(
                gridDelegate: SliverGridDelegateWithMaxCrossAxisExtent(
                    maxCrossAxisExtent: 200,
                    childAspectRatio: 3 / 2,
                    crossAxisSpacing: 20,
                    mainAxisSpacing: 20),
                physics: NeverScrollableScrollPhysics(),
                shrinkWrap: true,
                itemCount: 18,
                itemBuilder: (context, index) {
                  return Text('Some text more');
                })
          ],
        ),
      ),
    );
  }
}


  [1]: https://i.stack.imgur.com/D2knH.png

You have used ListView.builder directly to the column widget.您已将ListView.builder直接用于列小部件。 Column and its parent SingleChildScrollView widgets have infinity height and width. Column 及其父 SingleChildScrollView 小部件具有无限的高度和宽度。 You should set width and height for the ListView.builder widget or warp inside the Expanded widget.您应该为 ListView.builder 小部件设置宽度和高度,或者在Expanded小部件内设置扭曲。 I have resolved it by setting the height and widget.我通过设置高度和小部件解决了它。 Find the codes below.找到下面的代码。

class MenuPage extends StatefulWidget {
  @override
  _MenuPageState createState() => _MenuPageState();
}

class _MenuPageState extends State<MenuPage> {
  final List<String> litems = ["Hello", "how"];

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(),
      body: SingleChildScrollView(
        physics: ScrollPhysics(),
        child: Column(
          children: <Widget>[_buildListView(), _buildGridView()],
        ),
      ),
    );
  }

  GridView _buildGridView() {
    return GridView.builder(
      gridDelegate: SliverGridDelegateWithMaxCrossAxisExtent(
          maxCrossAxisExtent: 200,
          childAspectRatio: 3 / 2,
          crossAxisSpacing: 20,
          mainAxisSpacing: 20),
      physics: NeverScrollableScrollPhysics(),
      shrinkWrap: true,
      itemCount: 18,
      itemBuilder: (context, index) {
        return Text('Some text more');
      },
    );
  }

  Widget _buildListView() {
    final deviceWidth = MediaQuery.of(context).size.width;
    return Container(
      width: deviceWidth,
      height: 150.0,
      child: ListView.builder(
        scrollDirection: Axis.horizontal,
        physics: NeverScrollableScrollPhysics(),
        shrinkWrap: true,
        padding: EdgeInsets.all(8),
        itemCount: 18,
        itemBuilder: (context, index) {
          return Container(
            width: 100,
            height: 100,
            child: TextButton(
              onPressed: () {},
              child: Text("title"),
            ),
          );
        },
      ),
    );
  }
}

在此处输入图像描述

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM