web-dev-qa-db-ja.com

フラッターグリッドビューがスクロールしない

グリッドビューにヘッダーを追加しています。ヘッダーがスクロールしているが、グリッドビューに触れている。スクロールしていません。ヘッダーとグリッドビューをスクロールしたい。 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()は、ウィジェットで記述されたグリッド内のアイテムのリストです。

4
Joe

ウィジェットのスクロールに関連するいくつかの問題があります。次のように、Widgetsを使用してWrapの量を減らすことができます。

    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(     
2
diegoveloper

私はあなたのような似たようなコードを持っていました

  physics: ScrollPhysics(),

gridView.count()ウィジェットへ問題を解決しました

ソース: https://github.com/flutter/flutter/issues/19205

10
maheshmnj

カスタムスクロールビューを使用する必要があると思います

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...'), ], ), ), ], )

1
Sagar Bandamwar