diff --git a/lib/controller/discover/room_controller.dart b/lib/controller/discover/room_controller.dart index a1c6df8..5fa5511 100644 --- a/lib/controller/discover/room_controller.dart +++ b/lib/controller/discover/room_controller.dart @@ -7,6 +7,7 @@ import 'package:dating_touchme_app/extension/ex_widget.dart'; import 'package:dating_touchme_app/generated/assets.dart'; import 'package:dating_touchme_app/im/im_manager.dart'; import 'package:dating_touchme_app/model/discover/task_data.dart'; +import 'package:dating_touchme_app/model/discover/task_template_data.dart'; import 'package:dating_touchme_app/model/live/gift_product_model.dart'; import 'package:dating_touchme_app/model/mine/chat_static_data.dart'; import 'package:dating_touchme_app/model/rtc/link_mic_card_model.dart'; @@ -338,6 +339,28 @@ class RoomController extends GetxController with WidgetsBindingObserver { } } + final taskTemplateData = TaskTemplateData().obs; + + getTaskTemplateData() async { + try{ + final response = await _networkService.rtcApi.userGetTaskTemplateDetail( + id: "1", + ); + if (response.data.isSuccess) { + final data = response.data.data ?? TaskTemplateData(); + taskTemplateData.value = data; + } else { + + // 响应失败,抛出异常 + throw Exception(response.data.message ?? '获取数据失败'); + } + } catch(e) { + print('任务列表获取失败: $e'); + // SmartDialog.showToast('任务列表获取失败'); + rethrow; + } + } + void setDialogDismiss(bool flag){ isDialogShowing.value = flag; } diff --git a/lib/model/discover/task_template_data.dart b/lib/model/discover/task_template_data.dart new file mode 100644 index 0000000..f989fc0 --- /dev/null +++ b/lib/model/discover/task_template_data.dart @@ -0,0 +1,88 @@ +class TaskTemplateData { + String? id; + int? taskGroup; + int? taskType; + int? stageCode; + String? taskName; + String? taskDesc; + String? rewardValue; + List? subList; + + TaskTemplateData( + {this.id, + this.taskGroup, + this.taskType, + this.stageCode, + this.taskName, + this.taskDesc, + this.rewardValue, + this.subList}); + + TaskTemplateData.fromJson(Map json) { + id = json['id']; + taskGroup = json['taskGroup']; + taskType = json['taskType']; + stageCode = json['stageCode']; + taskName = json['taskName']; + taskDesc = json['taskDesc']; + rewardValue = json['rewardValue']; + if (json['subList'] != null) { + subList = []; + json['subList'].forEach((v) { + subList!.add(new SubList.fromJson(v)); + }); + } + } + + Map toJson() { + final Map data = new Map(); + data['id'] = this.id; + data['taskGroup'] = this.taskGroup; + data['taskType'] = this.taskType; + data['stageCode'] = this.stageCode; + data['taskName'] = this.taskName; + data['taskDesc'] = this.taskDesc; + data['rewardValue'] = this.rewardValue; + if (this.subList != null) { + data['subList'] = this.subList!.map((v) => v.toJson()).toList(); + } + return data; + } +} + +class SubList { + String? id; + String? subTaskName; + int? subTaskType; + String? subTaskDesc; + int? requiredCount; + int? sort; + + SubList( + {this.id, + this.subTaskName, + this.subTaskType, + this.subTaskDesc, + this.requiredCount, + this.sort}); + + SubList.fromJson(Map json) { + id = json['id']; + subTaskName = json['subTaskName']; + subTaskType = json['subTaskType']; + subTaskDesc = json['subTaskDesc']; + requiredCount = json['requiredCount']; + sort = json['sort']; + } + + Map toJson() { + final Map data = new Map(); + data['id'] = this.id; + data['subTaskName'] = this.subTaskName; + data['subTaskType'] = this.subTaskType; + data['subTaskDesc'] = this.subTaskDesc; + data['requiredCount'] = this.requiredCount; + data['sort'] = this.sort; + return data; + } +} diff --git a/lib/network/api_urls.dart b/lib/network/api_urls.dart index fc40c4c..8a8c563 100644 --- a/lib/network/api_urls.dart +++ b/lib/network/api_urls.dart @@ -175,4 +175,7 @@ class ApiUrls { static const String userGetTodayLiveIncome = 'dating-agency-mall/user/get/today-live-income'; + + static const String userGetTaskTemplateDetail = + 'dating-agency-mall/user/get/task-template/detail'; } diff --git a/lib/network/rtc_api.dart b/lib/network/rtc_api.dart index 8f6cd2b..688ef32 100644 --- a/lib/network/rtc_api.dart +++ b/lib/network/rtc_api.dart @@ -1,6 +1,7 @@ import 'package:dating_touchme_app/model/discover/audience_list_data.dart'; import 'package:dating_touchme_app/model/discover/live_income_data.dart'; import 'package:dating_touchme_app/model/discover/rtc_channel_model.dart'; +import 'package:dating_touchme_app/model/discover/task_template_data.dart'; import 'package:dating_touchme_app/model/live/gift_product_model.dart'; import 'package:dating_touchme_app/model/rtc/chat_audio_product_model.dart'; import 'package:dating_touchme_app/model/rtc/consume_rtc_channel_response.dart'; @@ -175,4 +176,13 @@ abstract class RtcApi { /// 获取用户道具连麦卡片 @GET(ApiUrls.userGetTodayLiveIncome) Future>> userGetTodayLiveIncome(); + + + /// 获取用户道具连麦卡片 + @GET(ApiUrls.userGetTaskTemplateDetail) + Future>> userGetTaskTemplateDetail( + { + @Query('id') required String id, + } + ); } diff --git a/lib/network/rtc_api.g.dart b/lib/network/rtc_api.g.dart index 442949d..035e8db 100644 --- a/lib/network/rtc_api.g.dart +++ b/lib/network/rtc_api.g.dart @@ -939,6 +939,41 @@ class _RtcApi implements RtcApi { return httpResponse; } + @override + Future>> + userGetTaskTemplateDetail({required String id}) async { + final _extra = {}; + final queryParameters = {r'id': id}; + final _headers = {}; + const Map? _data = null; + final _options = + _setStreamType>>( + Options(method: 'GET', headers: _headers, extra: _extra) + .compose( + _dio.options, + 'dating-agency-mall/user/get/task-template/detail', + queryParameters: queryParameters, + data: _data, + ) + .copyWith( + baseUrl: _combineBaseUrls(_dio.options.baseUrl, baseUrl), + ), + ); + final _result = await _dio.fetch>(_options); + late BaseResponse _value; + try { + _value = BaseResponse.fromJson( + _result.data!, + (json) => TaskTemplateData.fromJson(json as Map), + ); + } on Object catch (e, s) { + errorLogger?.logError(e, s, _options); + rethrow; + } + final httpResponse = HttpResponse(_value, _result); + return httpResponse; + } + RequestOptions _setStreamType(RequestOptions requestOptions) { if (T != dynamic && !(requestOptions.responseType == ResponseType.bytes || diff --git a/lib/pages/discover/task_detail.dart b/lib/pages/discover/task_detail.dart index e65d99a..7ab9ee9 100644 --- a/lib/pages/discover/task_detail.dart +++ b/lib/pages/discover/task_detail.dart @@ -1,6 +1,9 @@ import 'package:dating_touchme_app/components/page_appbar.dart'; +import 'package:dating_touchme_app/controller/discover/room_controller.dart'; +import 'package:dating_touchme_app/model/discover/task_template_data.dart'; import 'package:flutter/material.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:get/get.dart'; class TaskDetail extends StatefulWidget { const TaskDetail({super.key}); @@ -12,149 +15,174 @@ class TaskDetail extends StatefulWidget { class _TaskDetailState extends State { @override Widget build(BuildContext context) { - return Scaffold( - appBar: PageAppbar(title: "任务详情"), - body: SingleChildScrollView( - child: Container( - padding: EdgeInsets.symmetric( - vertical: 20.w, - horizontal: 15.w - ), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Container( - height: 228.w, - margin: EdgeInsets.only(bottom: 21.w), - decoration: BoxDecoration( - border: Border( - bottom: BorderSide(width: 1.w, color: const Color.fromRGBO(212, 212, 212, 1)) - ) + + final roomController = Get.find(); + return Obx( + () { + return Scaffold( + appBar: PageAppbar(title: "任务详情"), + body: SingleChildScrollView( + child: Container( + padding: EdgeInsets.symmetric( + vertical: 20.w, + horizontal: 15.w ), - child: Row( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, children: [ - Container( - width: 229.w, - decoration: BoxDecoration( - border: Border( - right: BorderSide(width: 1.w, color: const Color.fromRGBO(212, 212, 212, 1)) - ) - ), - child: Column( - children: [ - Container( - height: 37.w, - color: const Color.fromRGBO(247, 247, 247, 1), - child: Center( - child: Text( - "任务详情", - style: TextStyle( - fontSize: 14.w - ), + IntrinsicHeight( + child: Container( + margin: EdgeInsets.only(bottom: 21.w), + decoration: BoxDecoration( + border: Border( + bottom: BorderSide(width: 1.w, color: const Color.fromRGBO(212, 212, 212, 1)) + ) + ), + child: Row( + children: [ + Container( + width: 229.w, + decoration: BoxDecoration( + border: Border( + right: BorderSide(width: 1.w, color: const Color.fromRGBO(212, 212, 212, 1)) + ) ), - ), - ), - Container( - height: 50.w, - padding: EdgeInsets.only(left: 14.w, right: 18.w), - decoration: BoxDecoration( - border: Border( - bottom: BorderSide(width: 1.w, color: const Color.fromRGBO(212, 212, 212, 1)) - ) - ), - alignment: Alignment.centerLeft, - child: Text( - "1.有效开播时长≥4小时;", - style: TextStyle( - fontSize: 14.w + child: Column( + children: [ + Container( + height: 37.w, + color: const Color.fromRGBO(247, 247, 247, 1), + child: Center( + child: Text( + "任务详情", + style: TextStyle( + fontSize: 14.w + ), + ), + ), + ), + Container( + padding: EdgeInsets.only(left: 14.w, right: 18.w, top: 8.w, bottom: 8.w), + decoration: BoxDecoration( + border: Border( + bottom: BorderSide(width: 1.w, color: const Color.fromRGBO(212, 212, 212, 1)) + ) + ), + alignment: Alignment.centerLeft, + child: Text( + "1.${ + roomController.taskTemplateData.value.subList!.firstWhere( + (e) => e.sort == 1, + orElse: () => SubList(sort: 0), + ).sort != 0 ? roomController.taskTemplateData.value.subList!.firstWhere( + (e) => e.sort == 1, + orElse: () => SubList(sort: 0), + ).subTaskDesc : "" + };", + style: TextStyle( + fontSize: 14.w + ), + ), + ), + Container( + padding: EdgeInsets.only(left: 14.w, right: 18.w, top: 8.w, bottom: 8.w), + decoration: BoxDecoration( + border: Border( + bottom: BorderSide(width: 1.w, color: const Color.fromRGBO(212, 212, 212, 1)) + ) + ), + alignment: Alignment.centerLeft, + child: Text( + "2.${ + roomController.taskTemplateData.value.subList!.firstWhere( + (e) => e.sort == 2, + orElse: () => SubList(sort: 0), + ).sort != 0 ? roomController.taskTemplateData.value.subList!.firstWhere( + (e) => e.sort == 2, + orElse: () => SubList(sort: 0), + ).subTaskDesc : "" + };", + style: TextStyle( + fontSize: 14.w + ), + ), + ), + Container( + padding: EdgeInsets.only(left: 14.w, right: 18.w, top: 8.w, bottom: 8.w), + alignment: Alignment.centerLeft, + child: Text( + "3.${ + roomController.taskTemplateData.value.subList!.firstWhere( + (e) => e.sort == 3, + orElse: () => SubList(sort: 0), + ).sort != 0 ? roomController.taskTemplateData.value.subList!.firstWhere( + (e) => e.sort == 3, + orElse: () => SubList(sort: 0), + ).subTaskDesc : "" + }", + style: TextStyle( + fontSize: 14.w + ), + ), + ) + ], ), ), - ), - Container( - height: 70.w, - padding: EdgeInsets.only(left: 14.w, right: 18.w), - decoration: BoxDecoration( - border: Border( - bottom: BorderSide(width: 1.w, color: const Color.fromRGBO(212, 212, 212, 1)) - ) - ), - alignment: Alignment.centerLeft, - child: Text( - "2.邀请1个女嘉宾上麦,每个女嘉宾≥3个男嘉宾打卡方可下麦;", - style: TextStyle( - fontSize: 14.w - ), - ), - ), - Container( - height: 70.w, - padding: EdgeInsets.only(left: 14.w, right: 18.w), - alignment: Alignment.centerLeft, - child: Text( - "3.直播间打卡人数≥5人,每个男嘉宾上麦时间≥3分钟算一次打卡", - style: TextStyle( - fontSize: 14.w + Expanded( + child: Column( + children: [ + Container( + height: 37.w, + color: const Color.fromRGBO(247, 247, 247, 1), + child: Center( + child: Text( + "任务奖励", + style: TextStyle( + fontSize: 14.w + ), + ), + ), + ), + Expanded( + child: Container( + padding: EdgeInsets.only(left: 14.w, right: 18.w), + alignment: Alignment.center, + child: Text( + "${roomController.taskTemplateData.value.rewardValue ?? ""}元", + style: TextStyle( + fontSize: 18.w, + color: const Color.fromRGBO(239, 19, 46, 1) + ), + ), + ), + ) + ], ), - ), - ) - ], + ) + ], + ), ), ), - Expanded( - child: Column( - children: [ - Container( - height: 37.w, - color: const Color.fromRGBO(247, 247, 247, 1), - child: Center( - child: Text( - "任务奖励", - style: TextStyle( - fontSize: 14.w - ), - ), - ), - ), - Expanded( - child: Container( - padding: EdgeInsets.only(left: 14.w, right: 18.w), - alignment: Alignment.center, - child: Text( - "10元", - style: TextStyle( - fontSize: 18.w, - color: const Color.fromRGBO(239, 19, 46, 1) - ), - ), - ), - ) - ], + Text( + "任务说明", + style: TextStyle( + fontSize: 14.w + ), + ), + SizedBox(height: 6.w,), + Text( + "${roomController.taskTemplateData.value.taskDesc ?? ""}", + style: TextStyle( + fontSize: 14.w, + color: const Color.fromRGBO(144, 144, 144, 1) ), ) ], ), ), - Text( - "任务说明", - style: TextStyle( - fontSize: 14.w - ), - ), - SizedBox(height: 6.w,), - Text( - "1.奖励场景:三人相亲直播间\n" - "2.结算时间:次日9:00\n" - "3.付费上麦男嘉宾次数:20玫瑰+体验卡\n" - "4.奖励可叠加", - style: TextStyle( - fontSize: 14.w, - color: const Color.fromRGBO(144, 144, 144, 1) - ), - ) - ], - ), - ), - ), + ), + ); + } ); } } diff --git a/lib/widget/live/today_task_dialog.dart b/lib/widget/live/today_task_dialog.dart index 1a42f5a..fd93cee 100644 --- a/lib/widget/live/today_task_dialog.dart +++ b/lib/widget/live/today_task_dialog.dart @@ -81,6 +81,7 @@ class _TodayTaskDialogState extends State { // 隐藏键盘 FocusScope.of(context).unfocus(); // 隐藏 overlay + await roomController.getTaskTemplateData(); await SmartDialog.dismiss(); Get.to(() => TaskDetail()); })