flutter中StaggeredGridView上拉刷新触发了,数组也发生了变化,但是列表没有任何变化
class HomeTabPage extends StatefulWidget {
final String? name;
final List<BannerMo>? bannerList;
const HomeTabPage({Key? key, this.name, this.bannerList}) : super(key: key);
@override
_HomeTabPageState createState() => _HomeTabPageState();
}
const bannerString = "[{\"title\":\"视频1\",\"type\":\"video\",\"url\":\"地址链接\",\"cover\":\"https://img0.baidu.com/it/u=4008146120,512111027&fm=253&app=138&size=w931&n=0&f=JPEG&fmt=auto?sec=1665421200&t=096ce0c96dbc4abbec9fdeb707aa2570\",\"name\":0},"
"{\"title\":\"网页1\",\"type\":\"url\",\"url\":\"地址链接\",\"cover\":\"https://img1.baidu.com/it/u=3622442929,3246643478&fm=253&app=138&size=w931&n=0&f=JPEG&fmt=auto?sec=1665421200&t=6f3dc0e6a6f0c9d1703612dc581d4bc9\",\"name\":1},"
"{\"title\":\"视频2\",\"type\":\"video\",\"url\":\"地址链接\",\"cover\":\"https://img1.baidu.com/it/u=3009731526,373851691&fm=253&app=138&size=w931&n=0&f=JPEG&fmt=auto?sec=1665421200&t=63cf502da41c3ccb7f03dd03309fae01\",\"name\":2},"
"{\"title\":\"网页2\",\"type\":\"url\",\"url\":\"地址链接\",\"cover\":\"https://img2.baidu.com/it/u=1814268193,3619863984&fm=253&app=138&size=w931&n=0&f=JPEG&fmt=auto?sec=1665421200&t=e27eb9d3e19f9d79609023bcd4fc4505\",\"name\":3}]";
class _HomeTabPageState extends State<HomeTabPage> with AutomaticKeepAliveClientMixin{
List<VideoModel> videoList=[];
final List bannnerjsonMap=jsonDecode(bannerString);
ScrollController _scrollController=ScrollController();
bool _loading=false;
@override
void initState() {
// TODO: implement initState
super.initState();
_scrollController.addListener(() {
var dis=_scrollController.position.maxScrollExtent-_scrollController.position.pixels;
print('dis:${dis}');
//当底部距离不足300时加载更多
if(dis<300){
if(!_loading){
_loadDate(loadMore: true);
}
}
});
_loadDate();
}
@override
Widget build(BuildContext context) {
return RefreshIndicator(
onRefresh: _loadDate,
color: Colors.yellow,
child: MediaQuery.removePadding(
removeTop: true,
context: context,
child: StaggeredGridView.countBuilder(
controller: _scrollController,
crossAxisCount: 2,
itemCount: videoList.length,
itemBuilder: (BuildContext context, int index) {
if (widget.bannerList != null && index == 0) {
return Padding(
padding: EdgeInsets.only(bottom: 8), child: _banner());
} else {
return VideoCard(videoModel: videoList[index],);
}
},
staggeredTileBuilder: (int index) {
if (widget.bannerList != null && index == 0) {
// Banner 独占两列
return StaggeredTile.fit(2);
// return StaggeredTile.count(2, 1);
} else {
return StaggeredTile.fit(1);
}
},
),
),
);
}
_banner() {
return Padding(padding: const EdgeInsets.only(left: 8,right: 8),
child: HiBanner(bannerList: widget.bannerList!,));
}
Future<void> _loadDate({loadMore=false}) async {
_loading=true;
print("1111111111");
for(var a=0;a<3;a++){
videoList.add(VideoModel.fromJson(bannnerjsonMap[0]));
videoList.add(VideoModel.fromJson(bannnerjsonMap[1]));
videoList.add(VideoModel.fromJson(bannnerjsonMap[2]));
videoList.add(VideoModel.fromJson(bannnerjsonMap[3]));
}
print("videolist:${videoList.length}++banner:${widget.bannerList!.length}");
Future.delayed(Duration(milliseconds: 1000),(){
_loading=false;
});
}
//列表常驻内存,不会自动刷新
@override
// TODO: implement wantKeepAlive
bool get wantKeepAlive => true;
}