Browse Source

修改首页

ios
Jolie 4 months ago
parent
commit
8842d2cac9
5 changed files with 125 additions and 91 deletions
  1. 120
      lib/controller/home/home_controller.dart
  2. 6
      lib/network/home_api.dart
  3. 39
      lib/network/home_api.g.dart
  4. 49
      lib/network/response_model.dart
  5. 2
      pubspec.lock

120
lib/controller/home/home_controller.dart

@ -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,
/// recordscurrentpagesMap
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) {
//

6
lib/network/home_api.dart

@ -11,12 +11,12 @@ abstract class HomeApi {
factory HomeApi(Dio dio) = _HomeApi;
///
/// [page] -
/// [pageNum] -
/// [pageSize] -
/// [type] - 0-1-
@GET(ApiUrls.getMarriageList)
Future<HttpResponse<BaseResponse<dynamic>>> getMarriageList({
@Query('page') required int page,
Future<HttpResponse<BaseResponse<PaginatedResponse<dynamic>>>> getMarriageList({
@Query('pageNum') required int pageNum,
@Query('pageSize') required int pageSize,
@Query('type') required int type,
});

39
lib/network/home_api.g.dart

@ -20,35 +20,42 @@ class _HomeApi implements HomeApi {
final ParseErrorLogger? errorLogger;
@override
Future<HttpResponse<BaseResponse<dynamic>>> getMarriageList({
required int page,
Future<HttpResponse<BaseResponse<PaginatedResponse<dynamic>>>>
getMarriageList({
required int pageNum,
required int pageSize,
required int type,
}) async {
final _extra = <String, dynamic>{};
final queryParameters = <String, dynamic>{
r'page': page,
r'pageNum': pageNum,
r'pageSize': pageSize,
r'type': type,
};
final _headers = <String, dynamic>{};
const Map<String, dynamic>? _data = null;
final _options = _setStreamType<HttpResponse<BaseResponse<dynamic>>>(
Options(method: 'GET', headers: _headers, extra: _extra)
.compose(
_dio.options,
'dating-agency-service/user/page/dongwo/marriage-information',
queryParameters: queryParameters,
data: _data,
)
.copyWith(baseUrl: _combineBaseUrls(_dio.options.baseUrl, baseUrl)),
);
final _options =
_setStreamType<HttpResponse<BaseResponse<PaginatedResponse<dynamic>>>>(
Options(method: 'GET', headers: _headers, extra: _extra)
.compose(
_dio.options,
'dating-agency-service/user/page/dongwo/marriage-information',
queryParameters: queryParameters,
data: _data,
)
.copyWith(
baseUrl: _combineBaseUrls(_dio.options.baseUrl, baseUrl),
),
);
final _result = await _dio.fetch<Map<String, dynamic>>(_options);
late BaseResponse<dynamic> _value;
late BaseResponse<PaginatedResponse<dynamic>> _value;
try {
_value = BaseResponse<dynamic>.fromJson(
_value = BaseResponse<PaginatedResponse<dynamic>>.fromJson(
_result.data!,
(json) => json as dynamic,
(json) => PaginatedResponse<dynamic>.fromJson(
json as Map<String, dynamic>,
(json) => json as dynamic,
),
);
} on Object catch (e, s) {
errorLogger?.logError(e, s, _options);

49
lib/network/response_model.dart

@ -41,52 +41,57 @@ class BaseResponse<T> {
///
class PaginatedResponse<T> {
final List<T> list;
final int total;
final int page;
final int pageSize;
final bool hasMore;
final List<T> records; //
final int total; //
final int size; //
final int current; //
final int pages; //
PaginatedResponse({
required this.list,
required this.records,
required this.total,
required this.page,
required this.pageSize,
this.hasMore = false,
required this.size,
required this.current,
required this.pages,
});
///
bool get hasMore => current < pages;
factory PaginatedResponse.fromJson(
Map<String, dynamic> json,
T Function(dynamic) fromJsonT,
) {
final list = <T>[];
if (json['list'] != null && json['list'] is List) {
for (final item in json['list']) {
list.add(fromJsonT(item));
final records = <T>[];
// records list
final listData = json['records'] ?? json['list'];
if (listData != null && listData is List) {
for (final item in listData) {
records.add(fromJsonT(item));
}
}
return PaginatedResponse(
list: list,
records: records,
total: json['total'] ?? 0,
page: json['page'] ?? 1,
pageSize: json['pageSize'] ?? 10,
hasMore: json['hasMore'] ?? false,
size: json['size'] ?? json['pageSize'] ?? 10,
current: json['current'] ?? json['page'] ?? 1,
pages: json['pages'] ?? 1,
);
}
Map<String, dynamic> toJson(Object Function(T) toJsonT) {
return {
'records': list.map((e) => toJsonT(e)).toList(),
'records': records.map((e) => toJsonT(e)).toList(),
'total': total,
'page': page,
'pageSize': pageSize,
'hasMore': hasMore,
'size': size,
'current': current,
'pages': pages,
};
}
@override
String toString() {
return 'PaginatedResponse{list: $list, total: $total, page: $page, pageSize: $pageSize, hasMore: $hasMore}';
return 'PaginatedResponse{records: ${records.length} items, total: $total, current: $current, pages: $pages, size: $size}';
}
}

2
pubspec.lock

@ -1583,7 +1583,7 @@ packages:
description:
name: video_thumbnail
sha256: "181a0c205b353918954a881f53a3441476b9e301641688a581e0c13f00dc588b"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "0.5.6"
visibility_detector:

Loading…
Cancel
Save