21.GridView组件

2020-06-10  本文已影响0人  凯司机

GridView用于展示多列的展示,在开发中也非常常见,比如直播App中的主播列表、电商中的商品列表等等。

在Flutter中我们可以使用GridView来实现,使用方式和ListView也比较相似。

GridView构造函数

我们先学习GridView构造函数的使用方法

一种使用GridView的方式就是使用构造函数来创建,和ListView对比有一个特殊的参数:gridDelegate

gridDelegate用于控制交叉轴的item数量或者宽度,需要传入的类型是SliverGridDelegate,但是它是一个抽象类,所以我们需要传入它的子类:

SliverGridDelegateWithFixedCrossAxisCount


SliverGridDelegateWithFixedCrossAxisCount({

  @requireddouble crossAxisCount, // 交叉轴的item个数

  double mainAxisSpacing = 0.0, // 主轴的间距

  double crossAxisSpacing = 0.0, // 交叉轴的间距

  double childAspectRatio = 1.0, // 子Widget的宽高比

})

classMyGridCountDemoextendsStatelessWidget{

  List<Widget> getGridWidgets() {

    returnList.generate(100, (index) {

      return Container(

        color: Colors.purple,

        alignment: Alignment(0, 0),

        child: Text("item$index", style: TextStyle(fontSize: 20, color: Colors.white)),

      );

    });

  }

  @override

  Widget build(BuildContext context) {

    return GridView(

      gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(

        crossAxisCount: 3,

        mainAxisSpacing: 10,

        crossAxisSpacing: 10,

        childAspectRatio: 1.0

      ),

      children: getGridWidgets(),

    );

  }

}

SliverGridDelegateWithMaxCrossAxisExtent

SliverGridDelegateWithMaxCrossAxisExtent({

  double maxCrossAxisExtent, // 交叉轴的item宽度

  double mainAxisSpacing = 0.0, // 主轴的间距

  double crossAxisSpacing = 0.0, // 交叉轴的间距

  double childAspectRatio = 1.0, // 子Widget的宽高比

})

classMyGridExtentDemoextendsStatelessWidget{

  List<Widget> getGridWidgets() {

    returnList.generate(100, (index) {

      return Container(

        color: Colors.purple,

        alignment: Alignment(0, 0),

        child: Text("item$index", style: TextStyle(fontSize: 20, color: Colors.white)),

      );

    });

  }

  @override

  Widget build(BuildContext context) {

    return GridView(

      gridDelegate: SliverGridDelegateWithMaxCrossAxisExtent(

        maxCrossAxisExtent: 150,

        mainAxisSpacing: 10,

        crossAxisSpacing: 10,

        childAspectRatio: 1.0

      ),

      children: getGridWidgets(),

    );

  }

}

上一篇 下一篇

猜你喜欢

热点阅读