zoukankan      html  css  js  c++  java
  • flutter 瀑布流分页 已实现

    瀑布流插件:flutter_staggered_grid_view

    参考:https://segmentfault.com/a/1190000019716289

    说明:在瀑布流的上方还有很多ui内容,独自封装的瀑布流会使布局出现问题,本文方法使用LIstView中的刷新,接口调用是根据id来获取最新数据,和参考的不太一样,但是都可以用

    页面布局:

    1.引入插件

    import 'package:flutter_staggered_grid_view/flutter_staggered_grid_view.dart';

    2.瀑布流组件及controller

    ScrollController _scrollController = new ScrollController();
    //  瀑布流
      Widget pubu() {
        return StaggeredGridView.countBuilder(
              shrinkWrap: true,
              controller: _scrollController,
              crossAxisCount: 4,
              crossAxisSpacing: 10,
              mainAxisSpacing: 10,
              itemCount: recommendPublishs.length,
              itemBuilder: (context, index) {
                return GestureDetector(
                      onTap: (){
                        NavigatorUtil.pushNamedWithParam(context, Routes.productdetail, recommendPublishs[index]['id']);
                      },
                      child: Container(
                          color: Colors.pink,
                          child: new Container(
                            color: Colors.white,
                            child: Column(
                              crossAxisAlignment: CrossAxisAlignment.start,
                              children: [
                                Container(
                                  margin: EdgeInsets.only(bottom: 10),
    //                              color: Colors.orange,
                                  child: FormFactory.netImg(recommendPublishs[index]['headImg'][0] ?? '',fit: BoxFit.fitWidth,height: null, null),
                                ),
                                Container(
                                  margin: EdgeInsets.only(bottom: 10),
                                  padding: EdgeInsets.only(left: 10, right: 10),
                                  child:  Text(recommendPublishs[index]['title'], maxLines: 2, overflow: TextOverflow.ellipsis, style: TextStyle(fontSize: ScreenUtil().setSp(20)),),
                                ),
                                Container(
                                  padding: EdgeInsets.only(left: 13, right: 13, bottom: 15),
                                  child: Row(
                                    children: [
                                      Expanded(
                                          child: Row(
                                            children: [
                                              Expanded(
                                                child: Row(
                                                  children: [
                                                    Text("¥", style: TextStyle(fontSize: ScreenUtil().setSp(17), color: Colors.red),),
                                                    Text(recommendPublishs[index]['price']??'', style: TextStyle(fontSize: ScreenUtil().setSp(20), color: Colors.red),),
                                                  ],
                                                ),
                                              ),
    
                                              Container(
                                                margin: EdgeInsets.only(left: 10),
                                                child: Text("已售1万+", style: TextStyle(fontSize: ScreenUtil().setSp(17), color: Color(0xff777777)),),
                                              ),
    
    //                                  Container(
    //                                    margin: EdgeInsets.only(left: 10),
    //                                    child: Text("2323付款"),
    //                                  ),
                                            ],
                                          )
                                      ),
    //                            IconButton(icon: Icon(Icons.more_horiz), onPressed: null)
                                    ],
                                  ),
                                ),
                              ],
                            ),
    
                          )
                      )
                  );
              },
    //        staggeredTileBuilder: (index) =>
    //            StaggeredTile.count(2, index == 0 ? 2.9 : 2.9)
    
              staggeredTileBuilder: (index) =>
                  StaggeredTile.fit(2) //自适应高度
          );
      }

    3.下拉刷新

    // 下拉刷新数据
      void _dataRequest(bool _beAdd) async{
    
        DioManager.get(Ajax.queryRecomendPublish, {"next": _id}, (result, resp) {
          var resultDataArr = result['data'];
          if (resultDataArr.length != 0) {
            for (var data in resultDataArr) {
              recommendPublishs.add(data);
              print("我应该要获取到数据");
              print(recommendPublishs);
              print(data);
            }
            _id = result['next'];
            if (mounted) {
              setState(() {
                if (!_beAdd) {
                  recommendPublishs.clear();
                  recommendPublishs = resultDataArr;
                } else {
                  recommendPublishs.addAll(resultDataArr);
                }
              });
            }
          }else{
           // _pucontroller.finishLoad(noMore: true);
          }
        });
      }

    4.上拉加载

    // 上拉加载数据
      Future<Null> _addMoreData() async {
    
        _dataRequest(true);
      }

    5.在 initState()中

    
        _dataRequest(true); // 初始化加载
        
        _scrollController.addListener(() {
          if (_scrollController.position.pixels ==
              _scrollController.position.maxScrollExtent) {
            _addMoreData(); // 上拉加载更多
            print("我已经是最底部了,要从这里请求");
          }
    
    
        });
  • 相关阅读:
    CentOS下安装SecureCRT的sz/rz工具包
    MyISAM InnoDB 区别
    PHP中extract()函数的妙用
    卸载rpm包遭遇error: specifies multiple packages
    获取textarea的光标位置,并插入数据
    如何使页面中的INPUT按指定的顺序移动焦点
    nginx 跑php时找不到文件报no input file specified.
    php高并发状态下文件的读写(fopen,fwrite,fread)
    gearman php 分布式搭建
    RPM包制作与实战
  • 原文地址:https://www.cnblogs.com/lude1994/p/14245677.html
Copyright © 2011-2022 走看看