// 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 = [].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 _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(); } }