Browse Source

对接模板接口

dev-2.0
王子贤 1 month ago
parent
commit
436fa745db
7 changed files with 318 additions and 130 deletions
  1. 23
      lib/controller/discover/room_controller.dart
  2. 88
      lib/model/discover/task_template_data.dart
  3. 3
      lib/network/api_urls.dart
  4. 10
      lib/network/rtc_api.dart
  5. 35
      lib/network/rtc_api.g.dart
  6. 288
      lib/pages/discover/task_detail.dart
  7. 1
      lib/widget/live/today_task_dialog.dart

23
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;
}

88
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>? subList;
TaskTemplateData(
{this.id,
this.taskGroup,
this.taskType,
this.stageCode,
this.taskName,
this.taskDesc,
this.rewardValue,
this.subList});
TaskTemplateData.fromJson(Map<String, dynamic> 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 = <SubList>[];
json['subList'].forEach((v) {
subList!.add(new SubList.fromJson(v));
});
}
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
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<String, dynamic> json) {
id = json['id'];
subTaskName = json['subTaskName'];
subTaskType = json['subTaskType'];
subTaskDesc = json['subTaskDesc'];
requiredCount = json['requiredCount'];
sort = json['sort'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
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;
}
}

3
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';
}

10
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<HttpResponse<BaseResponse<LiveIncomeData>>> userGetTodayLiveIncome();
///
@GET(ApiUrls.userGetTaskTemplateDetail)
Future<HttpResponse<BaseResponse<TaskTemplateData>>> userGetTaskTemplateDetail(
{
@Query('id') required String id,
}
);
}

35
lib/network/rtc_api.g.dart

@ -939,6 +939,41 @@ class _RtcApi implements RtcApi {
return httpResponse;
}
@override
Future<HttpResponse<BaseResponse<TaskTemplateData>>>
userGetTaskTemplateDetail({required String id}) async {
final _extra = <String, dynamic>{};
final queryParameters = <String, dynamic>{r'id': id};
final _headers = <String, dynamic>{};
const Map<String, dynamic>? _data = null;
final _options =
_setStreamType<HttpResponse<BaseResponse<TaskTemplateData>>>(
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<Map<String, dynamic>>(_options);
late BaseResponse<TaskTemplateData> _value;
try {
_value = BaseResponse<TaskTemplateData>.fromJson(
_result.data!,
(json) => TaskTemplateData.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 ||

288
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<TaskDetail> {
@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<RoomController>();
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)
),
)
],
),
),
),
),
);
}
);
}
}

1
lib/widget/live/today_task_dialog.dart

@ -81,6 +81,7 @@ class _TodayTaskDialogState extends State<TodayTaskDialog> {
//
FocusScope.of(context).unfocus();
// overlay
await roomController.getTaskTemplateData();
await SmartDialog.dismiss();
Get.to(() => TaskDetail());
})

Loading…
Cancel
Save