• flutter 刷新组件


    代码:

    import 'package:flutter/material.dart';
    import 'package:flutter_project/service/service_method.dart';
    import 'dart:convert';
    import 'swiper_demo.dart';
    import 'top_navigator.dart';
    import 'adbanner.dart';
    import 'callPhone.dart';
    import 'recommand.dart';
    import 'floor.dart';
    import 'hot_goods.dart';
    import 'package:flutter_easyrefresh/easy_refresh.dart';
    class HomePage extends StatefulWidget {
    HomePage({Key key}) : super(key: key);

    @override
    _HomePageState createState() => _HomePageState();
    }

    class _HomePageState extends State<HomePage> with AutomaticKeepAliveClientMixin {//with 混入 AutomaticKeepAliveClientMixin保活 1.需要这个类继承 StatefulWidget 2.重写wantKeepAlive 并置为true 3.在此文件的父页面使用IndexedStack
    int pageIndex = 1; //页码
    GlobalKey<HotGoodsState> hotGoodsKey = new GlobalKey<HotGoodsState>();//不能使用_xxx声明的类 那是私有
    GlobalKey<RefreshFooterState> _footerStateKey = new GlobalKey<RefreshFooterState>();
    @override
    bool get wantKeepAlive => true;//保持页面效果 就是返回当前页面不重新加载
    @override
    void initState() {
    super.initState();
    print('11111');//不保活 就会重新加载 就会调用这个方法
    }

    @override
    Widget build(BuildContext context) {
     
    //设置key
    return Scaffold(
    appBar: AppBar(title: Text('百姓生活')),
    body: Container(
    child: FutureBuilder(//网络数据返回能很好的渲染控件
    future: getHomePageContent(),//网络返回的数据
     
     
    builder: (context,snapshot){
    if (snapshot.hasData) {//snapshot 相当于返回的数据
    var data = json.decode(snapshot.data.toString());

    List<Map> swiper = (data['data']['slides'] as List).cast();

    List<Map> navlist = (data['data']['category'] as List).cast();

    String adPic = data['data']['advertesPicture']['PICTURE_ADDRESS'];

    String phoneBgImage = data['data']['shopInfo']['leaderImage'];
     
    String phoneNum = data['data']['shopInfo']['leaderPhone'];

    List<Map> recommendList = (data['data']['recommend'] as List).cast();

    String floorTitle1 = data['data']['floor1Pic']['PICTURE_ADDRESS'];
    String floorTitle2 = data['data']['floor2Pic']['PICTURE_ADDRESS'];
    String floorTitle3 = data['data']['floor3Pic']['PICTURE_ADDRESS'];

    List<Map> floorContent1 = (data['data']['floor1'] as List).cast();
    List<Map> floorContent2 = (data['data']['floor2'] as List).cast();
    List<Map> floorContent3 = (data['data']['floor3'] as List).cast();
    return EasyRefresh(
    child: ListView(
    children: <Widget>[//各个组件
    SwiperDiy(swiperDataList: swiper),//轮播
    TopNavigator(navigatorList: navlist),//导航引导
    AdBanner(adPicture: adPic),//广告
    CallPhone(backgroundImage: phoneBgImage,shopPhone:phoneNum,),//打电话
    Recomend(recommendList: recommendList,),//推荐
    FloorTitle(picture_address: floorTitle1,),//楼层标题
    FloorContent(floorGoodsList:floorContent1),//楼层内容
    FloorTitle(picture_address: floorTitle2,),//楼层标题
    FloorContent(floorGoodsList:floorContent2),//楼层内容
    FloorTitle(picture_address: floorTitle3,),//楼层标题
    FloorContent(floorGoodsList:floorContent3),//楼层内容
     
    HotGoods(key: hotGoodsKey,),//热门商品
    ],
    ),
    loadMore: ()async{
    pageIndex++;
    hotGoodsKey.currentState.getHotGoods(pageIndex);
    },
    refreshFooter: ClassicsFooter(//刷新尾样式
    bgColor: Colors.white,
    textColor: Colors.pink,
    moreInfoColor: Colors.pink,//加载中的颜色
    showMore: true,
    noMoreText: '',//没有信息 设置为空
    moreInfo: '加载中',
    loadReadyText: '上拉加载',
    loadingText: '加载中',
    loadText: '下拉',
    key: _footerStateKey,
    ),
    );
    }else{
    return Center(
    child: Text('加载错误'),
    );
    }
    },
    ),
    ),
    );
    }
    }
    总结:

    //刷新组件

    使用外部类的方法 需要把这个类的方法 类型 定义成public 

    HotGoodsState createState() => HotGoodsState();//想要外面调用 得使用不带_

    在需要调用的类中 定义 globalKey

     GlobalKey<HotGoodsState>  hotGoodsKey = new GlobalKey<HotGoodsState>();//不能使用_xxx声明的类 那是私有

    HotGoods(key: hotGoodsKey,),//热门商品 需要定义的类中引入key

    hotGoodsKey.currentState.getHotGoods(pageIndex);//方法的调用

  • 相关阅读:
    【Azure 应用服务】在Azure App Service多实例的情况下,如何在应用中通过代码获取到实例名(Instance ID)呢?
    【Azure 应用服务】App Service For Windows 中如何设置代理实现前端静态文件和后端Java Spring Boot Jar包
    【Azure Developer】使用Azure Key Vault 的Key签名后,离线验证的一些参考资料
    【Azure Function】调试 VS Code Javascript Function本地不能运行,报错 Value cannot be null. (Parameter 'provider')问题
    【Azure 应用服务】App Service 使用Tomcat运行Java应用,如何设置前端网页缓存的相应参数呢(Xms512m Xmx1204m)?
    【Azure API 管理】APIM添加Logtoeventhub的策略后,一些相关APIM与Event Hub的问题
    【Azure API 管理】为调用APIM的请求启用Trace 调试APIM Policy的利器
    【Azure 事件中心】China Azure上是否有Kafka服务简答
    【Azure 应用服务】探索在Azure上设置禁止任何人访问App Service的默认域名(Default URL)
    【Azure 微服务】记一次错误的更新Service Fabric 证书而引发的集群崩溃而只能重建
  • 原文地址:https://www.cnblogs.com/pp-pping/p/12235999.html
Copyright © 2020-2023  润新知