flutter Swiper+GridView

1,997 阅读1分钟

Swiper+GridView 嵌套在CustomScrollView中

    Widget _getShopView() {
    int page = 6; //一页显示的数量
    var container = Container(
      child: Center(
        child: Text("为你推荐"),
      ),
      height: 45,
      color: Color(0xFFF1f1f1),
    );
    if (_list_recommend == null || _list_recommend.length == 0) {
      return SliverToBoxAdapter(
        child: Column(children: <Widget>[
          container,
        ]),
      );
    }
    List<Widget> list = List();
    list.add(container);

    var itemCount = (_list_recommend.length * 1.0 / page).ceil();

    list.add(new Container(
        height: 370,
        color: Colors.white,
        child: new Swiper(
            itemBuilder: (BuildContext context, int index) {
              return new GridView.count(
                physics: new NeverScrollableScrollPhysics(), //禁止滑动
                crossAxisCount: 3,//一行显示几个
                children: _getIconItem(index == 0 ? 1 : index + 1, page),
                padding: const EdgeInsets.all(0), // padding 是防止GridView计算状态栏的高度
                childAspectRatio: 0.8,//GridView的宽高比
              );
            },
            pagination: new SwiperPagination(
                builder: DotSwiperPaginationBuilder(
                  color: Colors.black54,
                  activeColor: Colors.red,
                ),
                margin: EdgeInsets.only(top: 10, bottom: 10)),
            itemCount: itemCount,
            control: null,
            scrollDirection: Axis.horizontal,
            autoplay: false,
            loop: false,
            onTap: (index) => print('点击了第$index个'))));

    return SliverToBoxAdapter(
      child: Column(
        children: list,
        crossAxisAlignment: CrossAxisAlignment.stretch,
      ),
    );
  }
  
    List<Widget> _getIconItem(int index, int page) {
    List<Widget> list = List();
    for (var i = 0; i < _list_recommend.length; i++) {
      if ((index - 1) * page <= i && i < index * page) {
        list.add(new Padding(
          padding: EdgeInsets.only(left: 10, right: 10),
          child: new Container(
            child: new Column(
              crossAxisAlignment: CrossAxisAlignment.start,
              mainAxisAlignment: MainAxisAlignment.center,
              children: <Widget>[
                new Image.network(
                  Api.getInstance().photo + _list_recommend[i].path,
                  width: 100,
                  height: 100,
                  fit: BoxFit.fill,
                ),
                new Text(
                  _list_recommend[i].name,
                  maxLines: 2,
                  overflow: TextOverflow.ellipsis,
                  style: TextStyle(fontSize: 12),
                ),
                new Text(
                  "¥${_list_recommend[i].priceM}",
                  softWrap: false,
                  overflow: TextOverflow.ellipsis,
                ),
              ],
            ),
            width: 100,
          ),
        ));
      }
    }
    return list;
  }