美文网首页
现学flutter开发一个app (2)

现学flutter开发一个app (2)

作者: heldiam | 来源:发表于2019-05-04 14:25 被阅读0次

    最近闲来无事学习flutter模仿开发一个应用用来练手, 准备将学习过程记录成一系列文章备忘, 本文为该系列第(2)篇,全部代码已上传: github 首页布局

    导航

    1. 布局结构说明
    2. 开发

    布局结构说明

    image.png

    首页整体布局分为4部分

    1. 轮播图
    2. 分类导航
    3. 店铺列表
    4. 底部导航

    开发

       整体布局分为4块. 由于第3块之后是店铺列表,列表往下有下拉加载更多店铺功能.
    其中整体节目是一个listview再加上底部一个导航栏. listview元素为店铺数量在加3(轮播图,分类导航,底部加载更多动画)

    下面是list的builder代码

    Widget _buildItem(BuildContext context, int index) {
        if (index == 0) {
          return new HomeBanner(); //顶部轮播图
        } else if (index == 1) {
          return new HomeCategory(); // 分类导航
        } else if (index > this.brands.length + 1) { 
          if(isEnd) { 
            return RefreshWidget.loadMoreEnd(); //没有更多了
          }
          return RefreshWidget.loadMore(); //加载更多
        } else if (index > 1 && this.brands.length > 0) {
          index = index - 2;
          return HomeBrand(brand: this.brands[index]); // 店铺
        }
      }
    
    1. 轮播图

    轮播图使用的是一个flutter_swiper库

    2. 分类导航

    分类导航使用的是一个GridView. 但这里要取消掉gridview的滚动效果, 代码如下:

    @override
      Widget build(BuildContext context) {
        return Container(
          height: 220,
          child: GridView.builder(
              physics: new NeverScrollableScrollPhysics(), //取消滑动
              itemBuilder: _buildItem, // 标签
              itemCount: this.categorys.length, 
              padding: new EdgeInsets.all(20.0),
              gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
                mainAxisSpacing: 10.0,
                crossAxisSpacing: 20.0,
                crossAxisCount: 4,
              )),
        );
      }
    
    3. 店铺列表

    店铺布局是一个column分为上下2个部分,上面是名称图标栏. 下面商品列表为一个listview设置滚动方向为横向 scrollDirection: Axis.horizontal

    商品结构为一个column 上面是图,下面是标题价格等信息

    滑动到最下面是加载更多.下滑加载更多的代码如下

    // 首先在listview添加一个controller
    ....
    child: ListView.builder(
                 itemBuilder: _buildItem,
                 itemCount: brands.length + 3,
                 controller: _scrollController, //添加controller
               ),
    .....
    
    // 增加监听
    _scrollController.addListener(lostenerScrollController);
    
    // 监听是否滚动到最底部.
    void lostenerScrollController() {
       if (_scrollController.position.pixels ==
             _scrollController.position.maxScrollExtent) {
           if(!isEnd) {
             _getMore();
           }
       }
     }
    
    4. 底部导航

    底部导航是一个BottomNavigationBar很常规, 要注意的是type需要设置成BottomNavigationBarType.fixed不然图标一多会自动隐藏下面的文字描述

     BottomNavigationBar(
                iconSize: 20.0,
                fixedColor: Colors.black,
                items: [
                  BottomNavigationBarItem(
                    icon: Icon(
                      Icons.home,
                    ),
                    title: Text('首页', style: _iconTitleTextStyle),
                  ),
                  BottomNavigationBarItem(
                    icon: Icon(
                      Icons.crop_original,
                    ),
                    title: Text('当家', style: _iconTitleTextStyle),
                  ),
                  BottomNavigationBarItem(
                    icon: Icon(
                      Icons.shopping_cart,
                    ),
                    title: Text('购物车', style: _iconTitleTextStyle),
                  ),
                  BottomNavigationBarItem(
                    icon: Icon(
                      Icons.account_box,
                    ),
                    title: Text('会员', style: _iconTitleTextStyle),
                  ),
                ],
                //设置显示的模式
                type: BottomNavigationBarType.fixed,
              )
    

    相关文章

      网友评论

          本文标题:现学flutter开发一个app (2)

          本文链接:https://www.haomeiwen.com/subject/fypxoqtx.html