|
|
|
@ -56,17 +56,19 @@ class HomeController extends GetxController { |
|
|
|
recommendHasMore.value = true; |
|
|
|
|
|
|
|
// 获取推荐数据 (type=0) |
|
|
|
final List<MarriageData> items = await _fetchMarriageData( |
|
|
|
page: 1, |
|
|
|
final result = await _fetchMarriageData( |
|
|
|
pageNum: 1, |
|
|
|
type: 0, |
|
|
|
); |
|
|
|
|
|
|
|
// 重置并更新推荐列表 |
|
|
|
recommendFeed.clear(); |
|
|
|
recommendFeed.addAll(items); |
|
|
|
recommendFeed.addAll(result['records']); |
|
|
|
|
|
|
|
// 根据实际获取的数据量判断是否还有更多数据 |
|
|
|
recommendHasMore.value = items.length >= pageSize; |
|
|
|
// 根据返回的分页信息判断是否还有更多数据 |
|
|
|
final int currentPage = result['current'] ?? 1; |
|
|
|
final int totalPages = result['pages'] ?? 1; |
|
|
|
recommendHasMore.value = currentPage < totalPages; |
|
|
|
} catch (e) { |
|
|
|
_handleError('获取推荐列表异常', e, '推荐列表加载失败,请稍后重试'); |
|
|
|
} finally { |
|
|
|
@ -84,17 +86,19 @@ class HomeController extends GetxController { |
|
|
|
nearbyHasMore.value = true; |
|
|
|
|
|
|
|
// 获取同城数据 (type=1) |
|
|
|
final List<MarriageData> items = await _fetchMarriageData( |
|
|
|
page: 1, |
|
|
|
final result = await _fetchMarriageData( |
|
|
|
pageNum: 1, |
|
|
|
type: 1, |
|
|
|
); |
|
|
|
|
|
|
|
// 重置并更新同城列表 |
|
|
|
nearbyFeed.clear(); |
|
|
|
nearbyFeed.addAll(items); |
|
|
|
nearbyFeed.addAll(result['records']); |
|
|
|
|
|
|
|
// 根据实际获取的数据量判断是否还有更多数据 |
|
|
|
nearbyHasMore.value = items.length >= pageSize; |
|
|
|
// 根据返回的分页信息判断是否还有更多数据 |
|
|
|
final int currentPage = result['current'] ?? 1; |
|
|
|
final int totalPages = result['pages'] ?? 1; |
|
|
|
nearbyHasMore.value = currentPage < totalPages; |
|
|
|
} catch (e) { |
|
|
|
_handleError('获取同城列表异常', e, '同城列表加载失败,请稍后重试'); |
|
|
|
} finally { |
|
|
|
@ -124,16 +128,18 @@ class HomeController extends GetxController { |
|
|
|
recommendPage.value++; |
|
|
|
|
|
|
|
// 获取推荐数据 (type=0) |
|
|
|
final List<MarriageData> items = await _fetchMarriageData( |
|
|
|
page: recommendPage.value, |
|
|
|
final result = await _fetchMarriageData( |
|
|
|
pageNum: recommendPage.value, |
|
|
|
type: 0, |
|
|
|
); |
|
|
|
|
|
|
|
// 更新推荐列表 |
|
|
|
recommendFeed.addAll(items); |
|
|
|
recommendFeed.addAll(result['records']); |
|
|
|
|
|
|
|
// 根据实际获取的数据量判断是否还有更多数据 |
|
|
|
recommendHasMore.value = items.length >= pageSize; |
|
|
|
// 根据返回的分页信息判断是否还有更多数据 |
|
|
|
final int currentPage = result['current'] ?? recommendPage.value; |
|
|
|
final int totalPages = result['pages'] ?? recommendPage.value; |
|
|
|
recommendHasMore.value = currentPage < totalPages; |
|
|
|
} catch (e) { |
|
|
|
recommendPage.value--; // 回退页码 |
|
|
|
_handleError('加载推荐更多异常', e, '加载更多失败'); |
|
|
|
@ -151,16 +157,18 @@ class HomeController extends GetxController { |
|
|
|
nearbyPage.value++; |
|
|
|
|
|
|
|
// 获取同城数据 (type=1) |
|
|
|
final List<MarriageData> items = await _fetchMarriageData( |
|
|
|
page: nearbyPage.value, |
|
|
|
final result = await _fetchMarriageData( |
|
|
|
pageNum: nearbyPage.value, |
|
|
|
type: 1, |
|
|
|
); |
|
|
|
|
|
|
|
// 更新同城列表 |
|
|
|
nearbyFeed.addAll(items); |
|
|
|
nearbyFeed.addAll(result['records']); |
|
|
|
|
|
|
|
// 根据实际获取的数据量判断是否还有更多数据 |
|
|
|
nearbyHasMore.value = items.length >= pageSize; |
|
|
|
// 根据返回的分页信息判断是否还有更多数据 |
|
|
|
final int currentPage = result['current'] ?? nearbyPage.value; |
|
|
|
final int totalPages = result['pages'] ?? nearbyPage.value; |
|
|
|
nearbyHasMore.value = currentPage < totalPages; |
|
|
|
} catch (e) { |
|
|
|
nearbyPage.value--; // 回退页码 |
|
|
|
_handleError('加载同城更多异常', e, '加载更多失败'); |
|
|
|
@ -192,17 +200,19 @@ class HomeController extends GetxController { |
|
|
|
recommendHasMore.value = true; |
|
|
|
|
|
|
|
// 获取推荐数据 (type=0) |
|
|
|
final List<MarriageData> items = await _fetchMarriageData( |
|
|
|
page: 1, |
|
|
|
final result = await _fetchMarriageData( |
|
|
|
pageNum: 1, |
|
|
|
type: 0, |
|
|
|
); |
|
|
|
|
|
|
|
// 更新推荐列表 |
|
|
|
recommendFeed.clear(); |
|
|
|
recommendFeed.addAll(items); |
|
|
|
recommendFeed.addAll(result['records']); |
|
|
|
|
|
|
|
// 根据实际获取的数据量判断是否还有更多数据 |
|
|
|
recommendHasMore.value = items.length >= pageSize; |
|
|
|
// 根据返回的分页信息判断是否还有更多数据 |
|
|
|
final int currentPage = result['current'] ?? 1; |
|
|
|
final int totalPages = result['pages'] ?? 1; |
|
|
|
recommendHasMore.value = currentPage < totalPages; |
|
|
|
} catch (e) { |
|
|
|
_handleError('刷新推荐数据异常', e, '刷新失败,请稍后重试'); |
|
|
|
} finally { |
|
|
|
@ -220,17 +230,19 @@ class HomeController extends GetxController { |
|
|
|
nearbyHasMore.value = true; |
|
|
|
|
|
|
|
// 获取同城数据 (type=1) |
|
|
|
final List<MarriageData> items = await _fetchMarriageData( |
|
|
|
page: 1, |
|
|
|
final result = await _fetchMarriageData( |
|
|
|
pageNum: 1, |
|
|
|
type: 1, |
|
|
|
); |
|
|
|
|
|
|
|
// 更新同城列表 |
|
|
|
nearbyFeed.clear(); |
|
|
|
nearbyFeed.addAll(items); |
|
|
|
nearbyFeed.addAll(result['records']); |
|
|
|
|
|
|
|
// 根据实际获取的数据量判断是否还有更多数据 |
|
|
|
nearbyHasMore.value = items.length >= pageSize; |
|
|
|
// 根据返回的分页信息判断是否还有更多数据 |
|
|
|
final int currentPage = result['current'] ?? 1; |
|
|
|
final int totalPages = result['pages'] ?? 1; |
|
|
|
nearbyHasMore.value = currentPage < totalPages; |
|
|
|
} catch (e) { |
|
|
|
_handleError('刷新同城数据异常', e, '刷新失败,请稍后重试'); |
|
|
|
} finally { |
|
|
|
@ -252,39 +264,49 @@ class HomeController extends GetxController { |
|
|
|
} |
|
|
|
|
|
|
|
/// 私有方法:获取婚姻数据(统一的数据获取逻辑) |
|
|
|
Future<List<MarriageData>> _fetchMarriageData({ |
|
|
|
required int page, |
|
|
|
/// 返回包含records(数据列表)、current(当前页)、pages(总页数)的Map |
|
|
|
Future<Map<String, dynamic>> _fetchMarriageData({ |
|
|
|
required int pageNum, |
|
|
|
required int type, |
|
|
|
}) async { |
|
|
|
try { |
|
|
|
// 调用API获取数据 |
|
|
|
var response = await _homeApi.getMarriageList( |
|
|
|
page: page, |
|
|
|
pageNum: pageNum, |
|
|
|
pageSize: pageSize, |
|
|
|
type: type, |
|
|
|
); |
|
|
|
|
|
|
|
if (response.data.isSuccess && response.data.data != null) { |
|
|
|
// 根据API返回结构解析数据 |
|
|
|
final data = response.data.data; |
|
|
|
if (response.data.isSuccess) { |
|
|
|
final paginatedData = response.data.data; |
|
|
|
|
|
|
|
// 检查data是否包含列表数据 |
|
|
|
if (data is List) { |
|
|
|
// 如果data直接是列表,直接映射为MarriageData |
|
|
|
return data.map((item) => MarriageData.fromJson(item as Map<String, dynamic>)).toList(); |
|
|
|
} else if (data is Map<String, dynamic>) { |
|
|
|
// 如果data是对象,检查是否有list或records字段 |
|
|
|
final listData = data['list'] ?? data['records']; |
|
|
|
if (listData is List) { |
|
|
|
return listData.map((item) => MarriageData.fromJson(item as Map<String, dynamic>)).toList(); |
|
|
|
} |
|
|
|
// 检查data是否为空 |
|
|
|
if (paginatedData == null) { |
|
|
|
return { |
|
|
|
'records': <MarriageData>[], |
|
|
|
'current': pageNum, |
|
|
|
'pages': 1, |
|
|
|
'total': 0, |
|
|
|
'size': pageSize, |
|
|
|
}; |
|
|
|
} |
|
|
|
|
|
|
|
// 如果无法解析为有效列表,返回空列表 |
|
|
|
return []; |
|
|
|
// data 是 PaginatedResponse<dynamic>,直接使用其属性 |
|
|
|
// records 中的每个项是 dynamic,需要转换为 MarriageData |
|
|
|
final records = paginatedData.records |
|
|
|
.map((item) => MarriageData.fromJson(item as Map<String, dynamic>)) |
|
|
|
.toList(); |
|
|
|
|
|
|
|
return { |
|
|
|
'records': records, |
|
|
|
'current': paginatedData.current, |
|
|
|
'pages': paginatedData.pages, |
|
|
|
'total': paginatedData.total, |
|
|
|
'size': paginatedData.size, |
|
|
|
}; |
|
|
|
} else { |
|
|
|
// 响应失败,抛出异常 |
|
|
|
throw Exception(response.data.message ?? '获取数据失败'); |
|
|
|
throw Exception(response.data.message); |
|
|
|
} |
|
|
|
} catch (e) { |
|
|
|
// 向上抛出异常,让调用方处理 |
|
|
|
|