前端开发进阶篇——Flutter实战之网格组件

举报
小团子999 发表于 2020/08/09 14:47:58 2020/08/09
【摘要】 GridView组件

        网格组件是我们页面常用的组件,比如相册展示,电影展示。下面我将使用GridView完成一个小的热门电影页面展示。效果如下:

        

2. 主函数入口

        void main(List<String> args) {

          runApp(MyApp());

        }

        

        class MyApp extends StatelessWidget {

          @override

          Widget build(BuildContext context) {

            return MaterialApp(

              title: 'Hello Flutter',

              home: Scaffold(

                  appBar: new AppBar(

                    title: Text('热门电影'),

                  ),

                  body: Center(

                      child: Container(

                    child: MyGridView(),

                    //height: 200,

                  ))),

            );

          }

        }

     在主函数入口文件中我们定义了顶部导航(appbar)、在函数体body中就是我们的主体内容,我使用了center和container组件进行了包裹。


2. 页面主体MyGridView()编写

            class MyGridView extends StatelessWidget {

              @override

              Widget build(BuildContext context) {

                return GridView(

                  gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(

                      crossAxisCount: 3,

                      mainAxisSpacing: 2.0,

                      crossAxisSpacing: 2.0,

                      childAspectRatio: 0.7),

                  children: <Widget>[

                    new Image.network(

                        'http://img5.mtime.cn/mt/2018/10/22/104316.77318635_180X260X4.jpg',

                        fit: BoxFit.cover),

                    new Image.network(

                        'http://img5.mtime.cn/mt/2018/10/10/112514.30587089_180X260X4.jpg',

                        fit: BoxFit.cover),

                    new Image.network(

                        'http://img5.mtime.cn/mt/2018/11/13/093605.61422332_180X260X4.jpg',

                        fit: BoxFit.cover),

                    new Image.network(

                        'http://img5.mtime.cn/mt/2018/11/07/092515.55805319_180X260X4.jpg',

                        fit: BoxFit.cover),

                    new Image.network(

                        'http://img5.mtime.cn/mt/2018/11/21/090246.16772408_135X190X4.jpg',

                        fit: BoxFit.cover),

                    new Image.network(

                        'http://img5.mtime.cn/mt/2018/11/17/162028.94879602_135X190X4.jpg',

                        fit: BoxFit.cover),

                    new Image.network(

                        'http://img5.mtime.cn/mt/2018/11/19/165350.52237320_135X190X4.jpg',

                        fit: BoxFit.cover),

                    new Image.network(

                        'http://img5.mtime.cn/mt/2018/11/16/115256.24365160_180X260X4.jpg',

                        fit: BoxFit.cover),

                    new Image.network(

                        'http://img5.mtime.cn/mt/2018/11/20/141608.71613590_135X190X4.jpg',

                        fit: BoxFit.cover),

                    new Image.network(

                        'http://img5.mtime.cn/mt/2018/10/22/104316.77318635_180X260X4.jpg',

                        fit: BoxFit.cover),

                    new Image.network(

                        'http://img5.mtime.cn/mt/2018/10/10/112514.30587089_180X260X4.jpg',

                        fit: BoxFit.cover),

                    new Image.network(

                        'http://img5.mtime.cn/mt/2018/11/13/093605.61422332_180X260X4.jpg',

                        fit: BoxFit.cover),

                    new Image.network(

                        'http://img5.mtime.cn/mt/2018/11/07/092515.55805319_180X260X4.jpg',

                        fit: BoxFit.cover),

                    new Image.network(

                        'http://img5.mtime.cn/mt/2018/11/21/090246.16772408_135X190X4.jpg',

                        fit: BoxFit.cover),

                    new Image.network(

                        'http://img5.mtime.cn/mt/2018/11/17/162028.94879602_135X190X4.jpg',

                        fit: BoxFit.cover),

                    new Image.network(

                        'http://img5.mtime.cn/mt/2018/11/19/165350.52237320_135X190X4.jpg',

                        fit: BoxFit.cover),

                    new Image.network(

                        'http://img5.mtime.cn/mt/2018/11/16/115256.24365160_180X260X4.jpg',

                        fit: BoxFit.cover),

                    new Image.network(

                        'http://img5.mtime.cn/mt/2018/11/20/141608.71613590_135X190X4.jpg',

                        fit: BoxFit.cover),

                  ],

                );

              }

            }


        这个类我们返回了一个GridView组件。下面我将对GridView组件进行介绍。

    • gridDelegate:控制整个GridView子组件的布局。

    • crossAxisCount: 网格的列数,相当于一行放置的个数。

    • mainAxisSpacing: 主轴方向的间距。

    • crossAxisSpacing: 网格间的距离。

    • childAspectRatio: 子元素在横轴长度和主轴长度的比例,也就是我们宽和高的比例。

        在每一个网格中,我们都放了Image组件,其中用到了fit参数进行图片缩放模式设置,下面我们对其进行介绍一下。

    • fill:会拉伸填充满显示空间,图片本身长宽比会发生变化,图片会变形。

    • cover:会按图片的长宽比放大后居中填满显示空间,图片不会变形,超出显示空间部分会被剪裁。

    • contain:这是图片的默认适应规则,图片会在保证图片本身长宽比不变的情况下缩放以适应当前显示空间,图片不会变形。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。