Browse Source

对接banner接口

ios
王子贤 2 months ago
parent
commit
8cd5e937c8
7 changed files with 193 additions and 7 deletions
  1. 25
      lib/controller/home/home_controller.dart
  2. 87
      lib/model/home/banner_data.dart
  3. 3
      lib/network/api_urls.dart
  4. 5
      lib/network/home_api.dart
  5. 32
      lib/network/home_api.g.dart
  6. 3
      lib/pages/home/event_list.dart
  7. 45
      lib/pages/home/recommend_tab.dart

25
lib/controller/home/home_controller.dart

@ -1,3 +1,4 @@
import 'package:dating_touchme_app/model/home/banner_data.dart';
import 'package:get/get.dart';
import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
import '../../network/home_api.dart';
@ -6,6 +7,8 @@ import '../../model/home/marriage_data.dart';
class HomeController extends GetxController {
//
final recommendFeed = <MarriageData>[].obs;
//
final bannerLint = <Records>[].obs;
//
final nearbyFeed = <MarriageData>[].obs;
@ -39,6 +42,28 @@ class HomeController extends GetxController {
_homeApi = Get.find<HomeApi>();
//
loadInitialData();
getBannerList();
}
getBannerList() async {
try{
final response = await _homeApi.userPageBannerByCustomer();
if (response.data.isSuccess && response.data.data != null) {
final data = response.data.data?.records ?? [];
bannerLint.addAll(data.toList());
} else {
//
throw Exception(response.data.message ?? '获取数据失败');
}
} catch(e) {
print('玫瑰记录获取失败: $e');
SmartDialog.showToast('玫瑰记录获取失败');
rethrow;
}
}
///

87
lib/model/home/banner_data.dart

@ -0,0 +1,87 @@
class BannerData {
List<Records>? records;
int? total;
int? size;
int? current;
int? pages;
BannerData({this.records, this.total, this.size, this.current, this.pages});
BannerData.fromJson(Map<String, dynamic> json) {
if (json['records'] != null) {
records = <Records>[];
json['records'].forEach((v) {
records!.add(new Records.fromJson(v));
});
}
total = json['total'];
size = json['size'];
current = json['current'];
pages = json['pages'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
if (this.records != null) {
data['records'] = this.records!.map((v) => v.toJson()).toList();
}
data['total'] = this.total;
data['size'] = this.size;
data['current'] = this.current;
data['pages'] = this.pages;
return data;
}
}
class Records {
String? id;
String? appId;
int? noticeType;
String? image;
int? jumpType;
String? jumpValue;
String? startTime;
String? endTime;
bool? enable;
Null? remark;
Records(
{this.id,
this.appId,
this.noticeType,
this.image,
this.jumpType,
this.jumpValue,
this.startTime,
this.endTime,
this.enable,
this.remark});
Records.fromJson(Map<String, dynamic> json) {
id = json['id'];
appId = json['appId'];
noticeType = json['noticeType'];
image = json['image'];
jumpType = json['jumpType'];
jumpValue = json['jumpValue'];
startTime = json['startTime'];
endTime = json['endTime'];
enable = json['enable'];
remark = json['remark'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['id'] = this.id;
data['appId'] = this.appId;
data['noticeType'] = this.noticeType;
data['image'] = this.image;
data['jumpType'] = this.jumpType;
data['jumpValue'] = this.jumpValue;
data['startTime'] = this.startTime;
data['endTime'] = this.endTime;
data['enable'] = this.enable;
data['remark'] = this.remark;
return data;
}
}

3
lib/network/api_urls.dart

@ -146,6 +146,9 @@ class ApiUrls {
static const String userQuitSiteActivity =
'dating-agency-service/user/quit/site/activity';
static const String userPageBannerByCustomer =
'dating-agency-service/user/page/banner/by/customer';
// API端点
static const String listMatchmakerProduct =
'dating-agency-mall/user/page/product/by/matchmaker';

5
lib/network/home_api.dart

@ -1,3 +1,4 @@
import 'package:dating_touchme_app/model/home/banner_data.dart' hide Records;
import 'package:dating_touchme_app/model/home/event_data.dart';
import 'package:dating_touchme_app/model/home/event_list_data.dart' hide Records;
import 'package:dating_touchme_app/model/home/post_comment_data.dart' hide Records;
@ -91,4 +92,8 @@ abstract class HomeApi {
Future<HttpResponse<BaseResponse<dynamic>>> userQuitSiteActivity(
@Body() Map<String, dynamic> data,
);
@GET(ApiUrls.userPageBannerByCustomer)
Future<HttpResponse<BaseResponse<BannerData>>> userPageBannerByCustomer();
}

32
lib/network/home_api.g.dart

@ -490,6 +490,38 @@ class _HomeApi implements HomeApi {
return httpResponse;
}
@override
Future<HttpResponse<BaseResponse<BannerData>>>
userPageBannerByCustomer() async {
final _extra = <String, dynamic>{};
final queryParameters = <String, dynamic>{};
final _headers = <String, dynamic>{};
const Map<String, dynamic>? _data = null;
final _options = _setStreamType<HttpResponse<BaseResponse<BannerData>>>(
Options(method: 'GET', headers: _headers, extra: _extra)
.compose(
_dio.options,
'dating-agency-service/user/page/banner/by/customer',
queryParameters: queryParameters,
data: _data,
)
.copyWith(baseUrl: _combineBaseUrls(_dio.options.baseUrl, baseUrl)),
);
final _result = await _dio.fetch<Map<String, dynamic>>(_options);
late BaseResponse<BannerData> _value;
try {
_value = BaseResponse<BannerData>.fromJson(
_result.data!,
(json) => BannerData.fromJson(json as Map<String, dynamic>),
);
} on Object catch (e, s) {
errorLogger?.logError(e, s, _options);
rethrow;
}
final httpResponse = HttpResponse(_value, _result);
return httpResponse;
}
RequestOptions _setStreamType<T>(RequestOptions requestOptions) {
if (T != dynamic &&
!(requestOptions.responseType == ResponseType.bytes ||

3
lib/pages/home/event_list.dart

@ -9,7 +9,8 @@ import 'package:easy_refresh/easy_refresh.dart';
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get.dart';
import 'package:tdesign_flutter/tdesign_flutter.dart';import 'package:flutter_swiper_null_safety/flutter_swiper_null_safety.dart';
import 'package:tdesign_flutter/tdesign_flutter.dart';
import 'package:flutter_swiper_null_safety/flutter_swiper_null_safety.dart';
class EventList extends StatelessWidget {
const EventList({super.key});

45
lib/pages/home/recommend_tab.dart

@ -12,6 +12,8 @@ import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get.dart';
import 'package:dating_touchme_app/controller/home/home_controller.dart';
import 'package:dating_touchme_app/pages/home/content_card.dart';
import 'package:flutter_swiper_null_safety/flutter_swiper_null_safety.dart';
import 'package:tdesign_flutter/tdesign_flutter.dart';
/// Tab
class RecommendTab extends StatefulWidget {
@ -255,13 +257,44 @@ class _RecommendTabState extends State<RecommendTab>
),
Container(
padding: EdgeInsets.symmetric(horizontal: 12),
child: Image.asset(
Assets.imagesBanner,
width: 375.w - 24,
height: 90.w,
child: Swiper(
autoplay: true,
itemCount: controller.bannerLint.length,
loop: true,
onTap: (int index){
print(index);
if(controller.bannerLint[index].jumpType == 2){
Get.to(() => OpenWebView(url: controller.bannerLint[index].jumpValue ?? ""));
} else if(controller.bannerLint[index].jumpType == 3){
TDImageViewer.showImageViewer(context: context, images: [controller.bannerLint[index].jumpValue ?? ""]);
}
},
itemBuilder: (BuildContext context, int index) {
return CachedNetworkImage(
imageUrl: controller.bannerLint[index].image ?? "",
height: 90.w,
fit: BoxFit.cover,
imageBuilder: (context, imageProvider) => Container(
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(8),
image: DecorationImage(
image: imageProvider,
fit: BoxFit.cover,
),
),
),
errorWidget: (context, url, error) => Image.asset(
Assets.imagesUserAvatar,
width: 165.w,
height: 165.w,
fit: BoxFit.cover,
),
);
},
),
).onTap((){
Get.to(() => OpenWebView(url: "https://www.quzhaoqin.com/"));
}),
),
ListView.separated(
shrinkWrap: true, // 1
physics: const NeverScrollableScrollPhysics(), // 2

Loading…
Cancel
Save