122 lines
3.5 KiB
Dart
122 lines
3.5 KiB
Dart
import 'dart:async';
|
|
import 'dart:convert';
|
|
|
|
import 'package:easy_refresh/easy_refresh.dart';
|
|
import 'package:flutter/cupertino.dart';
|
|
import 'package:flutter/material.dart';
|
|
import 'package:get/get.dart';
|
|
import 'package:get/get_rx/get_rx.dart';
|
|
import 'package:wallpaperx/common/components/view_state_widget.dart';
|
|
import 'package:wallpaperx/common/http/http_util.dart';
|
|
import 'package:wallpaperx/common/http/url.dart';
|
|
import 'package:wallpaperx/common/utils/shared_util.dart';
|
|
import 'package:wallpaperx/entity/image_model.dart';
|
|
import 'package:wallpaperx/page/home/home_controller.dart';
|
|
import 'package:wallpaperx/routes/app_pages.dart';
|
|
|
|
class DiscoverController extends GetxController {
|
|
late final EasyRefreshController refreshController;
|
|
late ScrollController scrollViewController;
|
|
|
|
HomeController homeController = Get.find<HomeController>();
|
|
|
|
Rx<ViewState> viewState = ViewState.loading.obs;
|
|
RxList banners = [].obs;
|
|
RxList images = [].obs;
|
|
RxInt index = 0.obs;
|
|
|
|
/// 页码、每页数量
|
|
int skip = 0;
|
|
int limit = 20;
|
|
|
|
Timer? _timer;
|
|
|
|
@override
|
|
void onInit() {
|
|
super.onInit();
|
|
scrollViewController = ScrollController(initialScrollOffset: 0.0);
|
|
refreshController = EasyRefreshController(controlFinishLoad: true);
|
|
getImages();
|
|
}
|
|
|
|
/// 停止定时器
|
|
void _stopTimer() {
|
|
_timer?.cancel();
|
|
_timer = null;
|
|
}
|
|
|
|
@override
|
|
void onClose() {
|
|
super.onClose();
|
|
refreshController.dispose();
|
|
}
|
|
|
|
/// PageView页面改变回调
|
|
void onIndexChanged(int index) {
|
|
this.index.value = index;
|
|
update(["discover_background"]);
|
|
}
|
|
|
|
void getImages() {
|
|
List<String> tags = UPCache.getInstance().getStringList("labelSettingList");
|
|
HttpUtil.get(Url.getImages, (callback) async {
|
|
if (callback != null) {
|
|
dynamic res = json.decode(callback);
|
|
refreshController.finishLoad();
|
|
if (res["images"] != null) {
|
|
List list = List.from(res["images"]);
|
|
images.addAll(list.map((e) => ImageModel.fromJson(e)).toList());
|
|
list = (list..shuffle()).take(10).toList();
|
|
banners.addAll(list.map((e) => ImageModel.fromJson(e)).toList());
|
|
viewState = ViewState.normal.obs;
|
|
update(["discover_background"]);
|
|
} else {
|
|
viewState = ViewState.empty.obs;
|
|
}
|
|
_stopTimer();
|
|
}
|
|
},errorCallback: (e) {
|
|
_timer ??= Timer.periodic(const Duration(seconds: 2), (Timer t) {
|
|
getImages();
|
|
});
|
|
}, params: {"limit": limit, "skip": skip, "tags": tags.join(",")});
|
|
}
|
|
|
|
/// 上拉加载
|
|
void onLoad() {
|
|
skip += limit;
|
|
List<String> tags = UPCache.getInstance().getStringList("labelSettingList");
|
|
HttpUtil.get(Url.getImages, (callback) async {
|
|
if (callback != null) {
|
|
dynamic res = json.decode(callback);
|
|
refreshController.finishLoad();
|
|
if (res["images"] != null) {
|
|
List list = List.from(res["images"]);
|
|
images.addAll(list.map((e) => ImageModel.fromJson(e)).toList());
|
|
}
|
|
}
|
|
}, params: {"limit": limit, "skip": skip, "tags": tags.join(",")});
|
|
}
|
|
|
|
/// 点击壁纸
|
|
void onTapSwiperItem(int index) {
|
|
Get.toNamed(AppPages.wallpaperDet, arguments: {
|
|
'position': index,
|
|
'wallpaperList': banners,
|
|
});
|
|
}
|
|
|
|
/// 点击壁纸
|
|
void onTapGridItem(int index) {
|
|
Get.toNamed(AppPages.wallpaperDet, arguments: {
|
|
'position': index,
|
|
'wallpaperList': images,
|
|
});
|
|
}
|
|
|
|
/// 跳转搜索
|
|
void onTapToSearch() {
|
|
Get.toNamed(AppPages.search);
|
|
}
|
|
}
|