Flutter 布局练习之GridView组件

2019/12/27 16:21:36 | 阅100 来源:好空间网络 [打印] [关闭]
 

GridView.count(
      //必传参数,一行分为几列的意思
      crossAxisCount: 2,
      children: <Widget>[
        Text("我是文本"),
        Text("我是文本"),
        Text("我是文本"),
        Text("我是文本"),
        Text("我是文本"),
        Text("我是文本"),
        Text("我是文本"),
        Text("我是文本"),
        Text("我是文本"),
        Text("我是文本"),
        Text("我是文本"),
      ],
    );

效果图:


QQ图片20191226174025.png



2:子wedget水平方向的距离 crossAxisSpacing:20,代表子组件之间的水平距离为20

class MyGridView extends StatelessWidget {

  List<Widget> _getData(){
    List<Widget> list =new List();
    for (var i = 0; i < 20; i++) {
      list.add(
        Container(
          color:Colors.blue,
          alignment: Alignment.center,
          child: Text("我是第$i个数据",style: TextStyle(fontSize: 15,color: Colors.white),),
          )
      );
    }
   return list;
  }

  ///网格布局
  ///
  @override
  Widget build(BuildContext context) {
    return GridView.count(
      //必传参数,一行分为几列的意思
      crossAxisCount: 3,
      //子widget之间的水平方向距离
      crossAxisSpacing: 20,

      children: _getData(),
    );
  }
}

效果图:


QQ图片20191226174025.png


3:垂直子widget的距离  mainAxisSpacing: 20,

class MyGridView extends StatelessWidget {

  List<Widget> _getData(){
    List<Widget> list =new List();
    for (var i = 0; i < 20; i++) {
      list.add(
        Container(
          color:Colors.blue,
          alignment: Alignment.center,
          child: Text("我是第$i个数据",style: TextStyle(fontSize: 15,color: Colors.white),),
          )
      );
    }
   return list;
  }

  ///网格布局
  ///
  @override
  Widget build(BuildContext context) {
    return GridView.count(
      //必传参数,一行分为几列的意思
      crossAxisCount: 3,
      //子widget之间的水平方向距离
      crossAxisSpacing: 20,
      //子widget主轴(垂直)之间的距离
      mainAxisSpacing: 20,
      children: _getData(),
    );
  }
}

效果图:


QQ图片20191226174025.png


4:控制子widget的宽高

  注意在这个布局下子widge的高度没办法控制,他是受子widget里面的元素自动控制的,

  但是可以通过GridView给我们提供的childAspectRatio参数调整宽高比

  宽高比比较绕,比如:childAspectRatio:0.5 我自己的理解是 宽度是高度的 0.5 以此来慢慢调整子widget的大小

class MyGridView extends StatelessWidget {

  List<Widget> _getData(){
    List<Widget> list =new List();
    for (var i = 0; i < 20; i++) {
      list.add(
        Container(
          color:Colors.blue,
          alignment: Alignment.center,
          child: Text("我是第$i个数据",style: TextStyle(fontSize: 15,color: Colors.white),),
          )
      );
    }
   return list;
  }

  ///网格布局,
  ///注意在这个布局下子widge的高度没办法控制,他是受子widget里面的元素自动控制的,
  ///但是可以通过GridView给我们提供的childAspectRatio参数调整宽高比
  ///宽高比比较绕,比如:childAspectRatio:0.5 我自己的理解是 宽度是高度的 0.5 以此来慢慢调整子widget的大小
  ///
  @override
  Widget build(BuildContext context) {
    return GridView.count(
      //必传参数,一行分为几列的意思
      crossAxisCount: 3,
      //子widget之间的水平方向距离
      crossAxisSpacing: 20,
      //子widget主轴(垂直)之间的距离
      mainAxisSpacing: 20,
      //内边距
      padding: EdgeInsets.all(20),
      //设置子widget的宽高比
      childAspectRatio: 0.5,
      children: _getData(),
    );
  }
}

效果图:


QQ图片20191226174025.png


5: 循环渲染GridView

class MyGridView extends StatelessWidget {

//定义数据
 List listData=[
      {
        "title":"生态文明思想在福建木兰溪的先行探索",
        "imageurl":"https://inews.gtimg.com/newsapp_ls/0/11071505202_640330/0"
      },
        {
        "title":"反差:内地去香港的人骤减 香港来内地的人增多",
        "imageurl":"https://inews.gtimg.com/newsapp_ls/0/11069411689_640330/0"
      }
      ,
        {
        "title":"南山集团69亿打包出售青岛航空,青岛政府接盘",
        "imageurl":"https://inews.gtimg.com/newsapp_ls/0/11072149544_580328/0"
      }
      ,
        {
        "title":"灰熊5人上双终结雷霆四连胜 瓦兰21分保罗空砍23+11",
        "imageurl":"https://inews.gtimg.com/newsapp_ls/0/11070284356_580328/0"
      }
      ,
        {
        "title":"前几天,我家的智能音箱劝我自杀",
        "imageurl":"https://inews.gtimg.com/newsapp_ls/0/11067642200_580328/0"
      }
      ,
        {
        "title":"本年度重磅SUV盘点,奔驰GLS、宝马X7、奥迪Q8都是硬货",
        "imageurl":"https://inews.gtimg.com/newsapp_ls/0/11070425369_580328/0"
      }
    ];

    //循环数据库
  List<Widget> _getData(){
    var temp = listData.map((value){
        return Container(
          alignment: Alignment.center,
          child: Column(
            children: <Widget>[
              Image.network(value["imageurl"]),
              Text(value["title"])
            ],
            ),
        );
    });
    
   return temp.toList();
  }

  ///网格布局,
  ///注意在这个布局下子widge的高度没办法控制,他是受子widget里面的元素自动控制的,
  ///但是可以通过GridView给我们提供的childAspectRatio参数调整宽高比
  ///宽高比比较绕,比如:childAspectRatio:0.5 我自己的理解是 宽度是高度的 0.5 以此来慢慢调整子widget的大小
  ///
  @override
  Widget build(BuildContext context) {
    return GridView.count(
      //必传参数,一行分为几列的意思
      crossAxisCount: 2,
      //子widget之间的水平方向距离
      crossAxisSpacing: 10,
      //子widget主轴(垂直)之间的距离
      mainAxisSpacing: 10,
      //内边距
      padding: EdgeInsets.all(10),
      //设置子widget的宽高比
      //childAspectRatio: 0.5,
      children: _getData(),
    );
  }
}

效果图:


QQ图片20191226174025.png

经营许可证ICP:皖B2-20100052 公司邮箱:zcdnsz@jspkongjian.net
Copyright © 2004-2015, 安徽好空间网络科技有限公司 版权所有 , 本站素材部分来源于网络,如有侵权请告知删除。