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);//方法的調用


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM