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.
151 lines
4.2 KiB
151 lines
4.2 KiB
// controllers/visitor_controller.dart
|
|
import 'package:easy_refresh/easy_refresh.dart';
|
|
import 'package:get/get.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,
|
|
);
|
|
|
|
// 分页参数
|
|
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();
|
|
super.onClose();
|
|
}
|
|
}
|