zoukankan      html  css  js  c++  java
  • flutter网格布局之GridView组件

    前面总结了使用ListView来实现列表,但是,有的时候,数据量很大,需要使用矩阵方式排列才能更清晰的展示数据,在flutter中,可以使用网格列表组件GridView来实现这个布局。

    GridView接收如下可选参数属性:

    • scrollDirection:滚动方法 
    • padding:内边距 
    • resolve :组件反向排序
    • crossAxisSpacing :水平子 Widget 之间间距
    • mainAxisSpacing :垂直子 Widget 之间间距
    • crossAxisCount:一行的 Widget 数量
    • childAspectRatio:子 Widget 宽高比例 
    • children:
    • gridDelegate:控制布局主要用在GridView.builder 里面 

    GridView.count 实现网格布局

    import 'package:flutter/material.dart';
    
    void main() => runApp(MyApp());
    
    class MyApp extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        // TODO: implement build
        return MaterialApp(
          home: Scaffold(
            appBar: AppBar(title: Text('FlutterDemo')),
            body: LayoutDemo(),
          ));
      }
    }
    class LayoutDemo extends StatelessWidget {  
      @override
      Widget build(BuildContext context) {    
        return GridView.count(
    
            crossAxisCount: 3,  //一行的 Widget 数量
            children: <Widget>[
              Text('这是一个文本'),
              Text('这是一个文本'),
              Text('这是一个文本'),
              Text('这是一个文本'),
              Text('这是一个文本'),
              Text('这是一个文本'),
              Text('这是一个文本'),
              Text('这是一个文本'),
              Text('这是一个文本'),
              Text('这是一个文本'),
              Text('这是一个文本'),
              Text('这是一个文本'),
              Text('这是一个文本'),
              Text('这是一个文本')
            ],
        );
      }
    }

    动态数据

    class LayoutDemo extends StatelessWidget {  
      List<Widget> _getListData() {
        List listData=[
          {
              "title": 'Candy Shop',
              "author": 'Mohamed Chahin',
              "imageUrl": 'https://ss0.bdstatic.com/70cFuHSh_Q1YnxGkpoWK1HF6hhy/it/u=2191520521,2689315141&fm=27&gp=0.jpg',
          },
           {
              "title": 'Childhood in a picture',
              "author": 'Google',
              "imageUrl": 'https://ss3.bdstatic.com/70cFv8Sh_Q1YnxGkpoWK1HF6hhy/it/u=2606512668,2361120991&fm=27&gp=0.jpg',
          },
          {
              "title": 'Alibaba Shop',
              "author": 'Alibaba',
              "imageUrl": 'https://ss0.bdstatic.com/70cFuHSh_Q1YnxGkpoWK1HF6hhy/it/u=2191520521,2689315141&fm=27&gp=0.jpg',
          },  
        ];
          var tempList=listData.map((value){
              return Container(            
                child:Column(
                    children: <Widget>[
                      Image.network(value['imageUrl']),
                      SizedBox(height: 12),
                      Text(
                        value['title'],
                        textAlign: TextAlign.center,
                        style: TextStyle(
                          fontSize: 20
                        ),
                      )
                    ],
                ),
                decoration: BoxDecoration(
                  border: Border.all(
                    color:Color.fromRGBO(233, 233,233, 0.9),
                     1
                  )
                ),
                // height: 400,  //设置高度没有反应
              );
          });
          return tempList.toList();
      }
    
      @override
      Widget build(BuildContext context) {    
        return GridView.count(
            crossAxisSpacing:10.0 ,   //水平子 Widget 之间间距
            mainAxisSpacing: 10.0,    //垂直子 Widget 之间间距
            padding: EdgeInsets.all(10),
            crossAxisCount: 2,  //一行的 Widget 数量
            // childAspectRatio:0.7,  //宽度和高度的比例
            children: this._getListData(),
        );
      }
    }

    GridView.builder 实现网格布局

    class LayoutDemo extends StatelessWidget {  
      List listData=[
          {
              "title": 'Candy Shop',
              "author": 'Mohamed Chahin',
              "imageUrl": 'https://ss3.bdstatic.com/70cFv8Sh_Q1YnxGkpoWK1HF6hhy/it/u=2606512668,2361120991&fm=27&gp=0.jpg',
          },
           {
              "title": 'Childhood in a picture',
              "author": 'Google',
              "imageUrl": 'https://ss0.bdstatic.com/70cFuHSh_Q1YnxGkpoWK1HF6hhy/it/u=2191520521,2689315141&fm=27&gp=0.jpg',
          },
      ];
    
      Widget _getListData (context,index) {
            return Container(            
                child:Column(
                    children: <Widget>[
                      Image.network(listData[index]['imageUrl']),
                      SizedBox(height: 12),
                      Text(
                        listData[index]['title'],
                        textAlign: TextAlign.center,
                        style: TextStyle(
                          fontSize: 20
                        ),
                      )
                    ],
                ),
                decoration: BoxDecoration(
                  border: Border.all(
                    color:Color.fromRGBO(233, 233,233, 0.9),
                     1
                  )
                ),
                 // height: 400,  //设置高度没有反应
              );
      }
    
      @override
      Widget build(BuildContext context) {    
        return GridView.builder(
            //注意
            gridDelegate:SliverGridDelegateWithFixedCrossAxisCount(
              crossAxisSpacing:10.0 ,   //水平子 Widget 之间间距
              mainAxisSpacing: 10.0,    //垂直子 Widget 之间间距          
              crossAxisCount: 2,  //一行的 Widget 数量
            ),
            itemCount: listData.length,
            itemBuilder:this._getListData,
        );
      }
    }

  • 相关阅读:
    一个最简单的例子学习SAP Cloud for Customer HTML mashup
    SAP C4C Embedded Component最常见的故障原因分析
    使用SAP CRM Mock framework进行单元测试
    ABAP Debugging Script(调试器脚本)使用的一些实际例子
    SAP ABAP字符和字符串变量隐式转换的一些规则
    两种使用代码获得SAP CRM product sales status的办法
    扎根CNCF社区贡献五年是怎样的体验?听听华为云原生开源团队的负责人怎么说
    LiteOS调测利器:backtrace函数原理知多少
    微服务容错时,这些技术你要立刻想到
    Volcano 监控设计解读,一看就懂
  • 原文地址:https://www.cnblogs.com/yuyujuan/p/10969390.html
Copyright © 2011-2022 走看看