You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

154 lines
4.3 KiB

// controllers/visitor_controller.dart
import 'package:easy_refresh/easy_refresh.dart';
import 'package:get/get.dart';
import 'package:pull_to_refresh/pull_to_refresh.dart';
import '../../model/discover/visitor_model.dart';
class VisitorController extends GetxController {
// 访客列表
var visitors = <VisitorModel>[].obs;
// Refresh controllers
final EasyRefreshController refreshController = EasyRefreshController(
controlFinishRefresh: true,
controlFinishLoad: true,
);
// final RefreshController loadMoreController = RefreshController();
// 分页参数
var currentPage = 1.obs;
final int pageSize = 15;
var hasMore = true.obs;
var isLoading = false.obs;
@override
void onInit() {
super.onInit();
_loadInitialData();
}
// 加载初始数据
void _loadInitialData() async {
isLoading.value = true;
await Future.delayed(Duration(milliseconds: 800)); // 模拟网络延迟
final initialVisitors = _generateMockData(1, pageSize);
visitors.assignAll(initialVisitors);
isLoading.value = false;
hasMore.value = initialVisitors.length == pageSize;
}
// 下拉刷新
void onRefresh() async {
currentPage.value = 1;
hasMore.value = true;
await Future.delayed(Duration(milliseconds: 1000)); // 模拟网络延迟
final newVisitors = _generateMockData(1, pageSize);
visitors.assignAll(newVisitors);
refreshController.finishRefresh();
refreshController.resetFooter();
hasMore.value = newVisitors.length == pageSize;
if (newVisitors.isEmpty) {
hasMore.value = false;
}
}
// 上拉加载更多
void onLoadMore() async {
print('onLoadMore');
if (!hasMore.value) {
return;
}
currentPage.value++;
await Future.delayed(Duration(milliseconds: 800)); // 模拟网络延迟
final newVisitors = _generateMockData(currentPage.value, pageSize);
if (newVisitors.isEmpty) {
hasMore.value = false;
refreshController.finishLoad(IndicatorResult.noMore);
} else {
visitors.addAll(newVisitors);
// hasMore.value = true;
refreshController.finishLoad(IndicatorResult.success);
}
}
// 删除访客
void deleteVisitor(String visitorId) {
// visitors.removeWhere((visitor) => visitor.id == visitorId);
Get.snackbar('成功', '已删除访客记录');
}
// 清空所有访客记录
void clearAllVisitors() {
visitors.clear();
Get.snackbar('成功', '已清空所有访客记录');
}
// 获取今日访客数量
int get todayVisitorsCount {
return visitors.length;
}
// 获取在线访客数量
int get onlineVisitorsCount {
return visitors.length;
}
// 模拟数据生成
List<VisitorModel> _generateMockData(int page, int size) {
if (page > 3) return []; // 模拟只有3页数据
final names = [
'张三', '李四', '王五', '赵六', '钱七', '孙八', '周九', '吴十',
'小明', '小红', '小刚', '小花', '大山', '小云', '星辰', '大海'
];
final avatars = [
'https://randomuser.me/api/portraits/men/1.jpg',
'https://randomuser.me/api/portraits/women/1.jpg',
'https://randomuser.me/api/portraits/men/2.jpg',
'https://randomuser.me/api/portraits/women/2.jpg',
'https://randomuser.me/api/portraits/men/3.jpg',
'https://randomuser.me/api/portraits/women/3.jpg',
'https://randomuser.me/api/portraits/men/4.jpg',
'https://randomuser.me/api/portraits/women/4.jpg',
];
final pages = [
'首页', '产品页', '关于我们', '博客', '联系方式', '服务页', '价格页', '案例页'
];
final startIndex = (page - 1) * size;
final endIndex = startIndex + size;
return List.generate(size, (index) {
final globalIndex = startIndex + index;
final isOnline = globalIndex % 3 == 0; // 每3个有一个在线
return VisitorModel(
miId: 'visitor_${globalIndex + 1}',
nickName: names[globalIndex % names.length],
profilePhoto: avatars[globalIndex % avatars.length],
visitTime: '2025-11-14 10:42:42',
onlineStatus: 2,
describeInfo: '阿萨德垃圾袋杰克伦敦撒娇克拉斯的健康拉屎的 金坷垃四大皆空拉屎的距离考试啊'
);
});
}
@override
void onClose() {
// refreshController.dispose();
// loadMoreController.dispose();
super.onClose();
}
}