前端开发进阶篇——Flutter实战之商城首页02

举报
小团子999 发表于 2020/08/09 16:22:01 2020/08/09
【摘要】 Flutter商城实战之顶部轮播、顶部导航

1. 轮播插件Siwiper介绍

        首先我们需要介绍的是首页顶部的轮播组件。我们需要使用flutter的轮播插件siwiper。下面是对其参数的介绍:

参数 默认值 含义
_itemCount

轮播的数量
scrollDirection
Axis.horizontal
轮播滚动的方向。
loop
 true
是否循环轮播,false禁用连续循环模式。
index
0
轮播初始索引号。
autoplay
 false
是否自动播放。false则需手动滑动。
onIndexChanged  
 void onIndexChanged(int index)
当用户滑动或自动播放时,使用新索引调用
onTap
void onTap(int index)
当用户点击ui时调用。
duration
300.0 
轮播持续时间
pagination
null
设置new SwiperPagination()为显示默认分页

 2. 页面轮播模块编写

        页面效果:

            

        代码如下

            class SwiperDisplay extends StatelessWidget {

              final List swiperDataList;

              const SwiperDisplay({Key key, this.swiperDataList}) : super(key: key);

            

              @override

              Widget build(BuildContext context) {

                return Container(

                  height: ScreenUtil().setHeight(333),

                  width: ScreenUtil().setWidth(411),

                  child: Swiper(

                    itemCount: swiperDataList.length,

                    itemBuilder: (context, index) {

                      return Image.network("${swiperDataList[index]['image']}",

                          fit: BoxFit.fill);

                    },

                    autoplay: true,

                    pagination: new SwiperPagination(),

                  ),

                );

              }

            }

        在初始化SwiperDisplay类时,我们使用构造函数对于数据进行页面获取,存入swiperDataList中。在轮播页面构造时我们使用itemBuilder对于轮播图片数据进行逐一获取。并对轮播的参数进行了配置。

3. 顶部导航模块编写

        页面效果:

        

        代码如下:

            class TopNavigator extends StatelessWidget {

              final List navigatorList;

              const TopNavigator({Key key, this.navigatorList}) : super(key: key);

            

              Widget _gridViewItemUI(BuildContext context, item) {

                // print('进入导航...');

                // print(item);

                return InkWell(

                  onTap: () {

                    print("点击了导航...");

                  },

                  child: Column(

                    children: <Widget>[

                      Image.network(item['image'], width: ScreenUtil().setWidth(40)),

                      Text(item['title'])

                    ],

                  ),

                );

              }

            

              @override

              Widget build(BuildContext context) {

                // print("进入导航图片遍历");

                return Container(

                  height: ScreenUtil().setHeight(330),

                  padding: EdgeInsets.all(3.0),

                  child: GridView.count(

                    physics: NeverScrollableScrollPhysics(),

                    crossAxisCount: 5,

                    padding: EdgeInsets.all(4.0),

                    children: <Widget>[

                      // navigatorList.forEach((element) {

                      //    _gridViewItemUI(context,element);

                      // })

                      // return _gridViewItemUI(context, item)

                      _gridViewItemUI(context, navigatorList[0]),

                      _gridViewItemUI(context, navigatorList[1]),

                      _gridViewItemUI(context, navigatorList[2]),

                      _gridViewItemUI(context, navigatorList[3]),

                      _gridViewItemUI(context, navigatorList[4]),

                      _gridViewItemUI(context, navigatorList[5]),

                      _gridViewItemUI(context, navigatorList[6]),

                      _gridViewItemUI(context, navigatorList[7]),

                      _gridViewItemUI(context, navigatorList[8]),

                      _gridViewItemUI(context, navigatorList[9]),

                    ],

                  ),

                );

              }

            }

        我们还是利用TopNavigator类的构造函数进行页面数据获取,然后使用GridView布局进行页面布局,我们对于每行显示个数,间距进行了设置。由于GridView中的每一个组件第一样。所以我们抽离出了一个子组件方法用加载。返回的是InkWell组件,它的点击事件目前还未开发,它包括了一张图片和标题描述。其具体代码如下

         return InkWell(

                          onTap: () {

                            print("点击了导航...");

                          },

                          child: Column(

                            children: <Widget>[

                              Image.network(item['image'], width: ScreenUtil().setWidth(40)),

                              Text(item['title'])

                            ],

                          ),

                        );


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

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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