【问题标题】:Flutter Grid view is not scrollingFlutter Grid 视图不滚动
【发布时间】:2019-05-12 01:16:05
【问题描述】:

我正在网格视图中添加标题。标题正在滚动,但在触摸网格视图时。它不是滚动的。我想滚动标题和gridview。 我用过SingleChildScrollViewExpanded。如何解决请帮帮我。

我的代码如下所示

Widget ItemGridview() {
    return Container(
        color: Colors.white,
    padding: EdgeInsets.all(10),
    child: Column(
            mainAxisAlignment: MainAxisAlignment.start,
        crossAxisAlignment: CrossAxisAlignment.start,
        children: <Widget>[
            new Expanded(
            child: SingleChildScrollView(
            child: Column(
                children: <Widget>[
                new Text(
            'Items of products',
            style: TextStyle(fontWeight: FontWeight.w700, fontSize: 18.0),
            textAlign: TextAlign.left,
        ),
                GridView.count(
            shrinkWrap: true,
            primary: true,
            padding: EdgeInsets.only(top:15.0),
            crossAxisCount: 3,
            childAspectRatio: 0.60, //1.0
            mainAxisSpacing: 0.2, //1.0
            crossAxisSpacing: 4.0, //1.0
            children: createCategoryList(),
            ),
                ],
            ),
            )
        )
        ]
    ),
    );
}

在我的代码中,Items of products 是标题。

List<Widget> createCategoryList() {

  List<Widget> createCategoryList = List<Widget>();

  for (int i = 0; i < documents.length; i++) {
    createCategoryList
        .add(makeGridCell(documents[i].data['title'], "name", 8,documents[i].data['id']));
  }
  return createCategoryList;
}

  Container makeGridCell(String name, String image, int count, String id) {
  return Container(

      child: new GestureDetector(
        onTap: () {
        },
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.stretch,
          mainAxisSize: MainAxisSize.min,
          verticalDirection: VerticalDirection.down,
          children: <Widget>[
            new Container(
              child: Image.asset('assets/' + image + ".jpg"),

            ),
            new Container(
              color: Colors.white,
              padding: EdgeInsets.only(left: 5),
              child: new Text(name,
                  style: TextStyle(
                      fontWeight: FontWeight.w500, fontSize: 18.0)), 
            ),

          ],
        ),
      ));
}

createCategoryList() 是小部件中写入的网格中的项目列表。

【问题讨论】:

  • createCategoryList 里面有什么?
  • createCategoryList 是要在网格视图中添加的项目列表。它是在代码中添加的。

标签: android ios dart flutter flutter-layout


【解决方案1】:

我有像你一样的小部件树 gridview.count() 包裹在 SingleChildScrollView 添加

physics: ScrollPhysics(),

GridView.count() Widget 解决了我的问题

来源:https://github.com/flutter/flutter/issues/19205

【讨论】:

  • 我遇到了同样的问题,但它对我不起作用。有什么建议吗?
  • 基本上是您放置小部件的方式导致了问题,
  • 我该如何改进我的展示位置?我是新手,所以我不是很有经验
  • 随着时间的推移你会学会它,只是你需要了解基本的小部件,而那些会帮助你构建复杂的小部件
【解决方案2】:

只需在 GridView 中添加一些属性

  Widget _buildFields(BuildContext context) {
return Container(
    color: Colors.white,
    child: GridView.count(
      crossAxisCount: 2,
      crossAxisSpacing: 2.0,
      mainAxisSpacing: 2.0,
      shrinkWrap: true,
      scrollDirection: Axis.vertical,
      physics: NeverScrollableScrollPhysics(),
      children: List.generate(choices.length, (index) {
        return Center(
          child: new Column(
            children: [
              new Expanded(
                child: SelectCard(choice: choices[index]),//your card wight
              ),
            ],
          ),
        );
      }),
    ));
}

并像这样使用

class _Dashboard extends State<Dashboard> {
  @override
  Widget build(BuildContext context) {
    return OrientationBuilder(builder: (context, orientation) {
      return ListView(
        children: <Widget>[
          Container(
            height: 200,
            child: Image.network(
                "https://www.gizbot.com/img/2013/11/23-weekend-deals-top-10-latest-smartphones.jpg"),
          ),
          _buildFields(context),
        ],
      );
    });
  }
}

【讨论】:

  • 已经添加了“physics: NeverScrollableScrollPhysics()”,但仍然无法正常工作,在滚动屏幕事件中没有调用 scrollListener。
【解决方案3】:

我自己也遇到了这个问题,将 GridView 的 primary 参数更改为 false,试试看。

【讨论】:

    【解决方案4】:

    我认为您需要使用一些自定义滚动视图

    CustomScrollView(
      primary: false,
      slivers: <Widget>[
        SliverPadding(
          padding: const EdgeInsets.all(20.0),
          sliver: SliverGrid.count(
            crossAxisSpacing: 10.0,
            crossAxisCount: 2,
            children: <Widget>[
              const Text('He\'d have you all unravel at the'),
              const Text('Heed not the rabble'),
              const Text('Sound of screams but the'),
              const Text('Who scream'),
              const Text('Revolution is coming...'),
              const Text('Revolution, they...'),
            ],
          ),
        ),
      ],
    )
    

    【讨论】:

    • 我尝试了上面的答案,然后我得到了结果。谢谢你的帮助。
    • 我的荣幸@Joe
    【解决方案5】:

    physics: ScrollPhysics() 属性添加到Gridview。它会滚动。

    【讨论】:

    • 这个答案对我有帮助。谢谢@Sai Gopi Me
    【解决方案6】:

    您有一些与您的小部件滚动有关的问题,您可以使用Wrap 减少Widgets 的数量,如下所示:

        Container(
                color: Colors.white,
                padding: EdgeInsets.all(10),
                child: SingleChildScrollView(
                  child: Column(
                    crossAxisAlignment: CrossAxisAlignment.stretch,
                    mainAxisAlignment: MainAxisAlignment.center,
                    children: <Widget>[
                      new Text(
                        'Items of products',
                        style: TextStyle(fontWeight: FontWeight.w700, fontSize: 18.0),
                        textAlign: TextAlign.left,
                      ),
                      Padding(
                        padding: const EdgeInsets.only(top: 15.0),
                        child: Wrap(
                          spacing: 20.0,
                          alignment: WrapAlignment.spaceEvenly,
                          children:createCategoryList(),
                    ),
                        ],
                    ),
                    )
                )
                ]
            ),
            );
    

    为您的项目的小部件添加约束宽度或固定宽度:

        return Container(
              constraints:
                    BoxConstraints(maxWidth: MediaQuery.of(context).size.width / 4),
              child: new GestureDetector(     
    

    【讨论】:

    • 我发现@maheshmnj 编写的physics: ScrollPhysics() 解决方案既简单又快捷。
    猜你喜欢
    • 2021-02-05
    • 1970-01-01
    • 1970-01-01
    • 2021-08-25
    • 2021-02-08
    • 1970-01-01
    • 1970-01-01
    • 2019-06-09
    相关资源
    最近更新 更多