12 changed files with 680 additions and 133 deletions
Unified View
Diff Options
-
2lib/components/page_appbar.dart
-
9lib/controller/mine/league_controller.dart
-
84lib/controller/setting/spread_controller.dart
-
7lib/model/mine/rose_data.dart
-
2lib/network/api_urls.dart
-
3lib/network/user_api.dart
-
38lib/network/user_api.g.dart
-
26lib/pages/discover/live_room_page.dart
-
2lib/pages/setting/match_league_page.dart
-
197lib/pages/setting/match_spread_page.dart
-
354lib/widget/live/live_gift_popup.dart
-
89lib/widget/live/live_room_gift_item.dart
@ -0,0 +1,84 @@ |
|||||
|
import 'package:dating_touchme_app/model/mine/rose_data.dart'; |
||||
|
import 'package:dating_touchme_app/network/user_api.dart'; |
||||
|
import 'package:flutter_smart_dialog/flutter_smart_dialog.dart'; |
||||
|
import 'package:fluwx/fluwx.dart'; |
||||
|
import 'package:get/get.dart'; |
||||
|
|
||||
|
class SpreadController extends GetxController { |
||||
|
|
||||
|
// UserApi实例 |
||||
|
late UserApi _userApi; |
||||
|
final roseList = <RoseData>[].obs; |
||||
|
|
||||
|
final roseNum = 0.obs; |
||||
|
|
||||
|
final payChecked = true.obs; |
||||
|
|
||||
|
final activePay = 0.obs; |
||||
|
|
||||
|
final Fluwx fluwx = Fluwx(); |
||||
|
|
||||
|
changePayActive(int index){ |
||||
|
activePay.value = index; |
||||
|
} |
||||
|
|
||||
|
List<Map> list2 = [ |
||||
|
{'title': '邀请注册', 'unit': '10%', 'desc': '分佣', 'enable': 1, 'value': 111, 'icon': 'icon-right1'}, |
||||
|
{'title': '发布悬赏', 'unit': '10%', 'desc': '分佣', 'enable': 1, 'value': 112, 'icon': 'icon-right2'}, |
||||
|
{'title': '匹配悬赏', 'unit': '10%', 'desc': '分佣', 'enable': 0, 'value': 113, 'icon': 'icon-right41'}, |
||||
|
{'title': '推荐红娘', 'unit': '10%', 'desc': '分佣', 'enable': 1, 'value': 114, 'icon': 'icon-right3'}, |
||||
|
{'title': '免费升级', 'desc': '门店合伙人', 'enable': 0, 'value': 0, 'icon': 'icon-right51'}, |
||||
|
{'title': '资源共享', 'desc': '所有资料', 'enable': 1, 'value': 0, 'icon': 'icon-right6'}, |
||||
|
{'title': '业绩奖励', 'unit': '5%', 'desc': '奖励', 'enable': 1, 'value': 0, 'icon': 'icon-right71'}, |
||||
|
{'title': '次年续签', 'unit': '90%', 'desc': '减免', 'enable': 1, 'value': 0, 'icon': 'icon-right8'} |
||||
|
].obs; |
||||
|
|
||||
|
@override |
||||
|
void onInit() { |
||||
|
super.onInit(); |
||||
|
_userApi = Get.find<UserApi>(); |
||||
|
getRoseList(); |
||||
|
} |
||||
|
|
||||
|
getRoseList() async { |
||||
|
try{ |
||||
|
final response = await _userApi.getMatchmakerFee(); |
||||
|
if (response.data.isSuccess && response.data.data != null) { |
||||
|
final data = response.data.data!.records; |
||||
|
roseList.addAll(data.toList()); |
||||
|
} |
||||
|
print('rose>>>${roseList.length}'); |
||||
|
} catch (e) { |
||||
|
print('玫瑰列表获取失败: $e'); |
||||
|
rethrow; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
submitOrder() async { |
||||
|
try { |
||||
|
final response = await _userApi.submitOrder({ |
||||
|
"productSpecId": roseList[activePay.value].productSpecId |
||||
|
}); |
||||
|
if (response.data.isSuccess && response.data.data != null) { |
||||
|
final data = response.data.data; |
||||
|
fluwx.open(target: MiniProgram( |
||||
|
username: 'gh_9ea8d46add6f', |
||||
|
path:"pages/index/index?amount=${roseList[activePay.value].unitSellingPrice}&paymentOrderId=${data!.paymentOrderId}&url=match-fee" |
||||
|
)); |
||||
|
|
||||
|
SmartDialog.showToast('开始支付'); |
||||
|
} else { |
||||
|
|
||||
|
// 响应失败,抛出异常 |
||||
|
throw Exception(response.data.message ?? '获取数据失败'); |
||||
|
} |
||||
|
} catch (e) { |
||||
|
print('玫瑰列表获取失败: $e'); |
||||
|
SmartDialog.showToast('下单失败'); |
||||
|
rethrow; |
||||
|
} |
||||
|
|
||||
|
|
||||
|
} |
||||
|
|
||||
|
} |
||||
@ -0,0 +1,197 @@ |
|||||
|
import 'package:dating_touchme_app/components/page_appbar.dart'; |
||||
|
import 'package:dating_touchme_app/extension/ex_widget.dart'; |
||||
|
import 'package:dating_touchme_app/generated/assets.dart'; |
||||
|
import 'package:dating_touchme_app/model/mine/rose_data.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 '../../controller/setting/spread_controller.dart'; |
||||
|
|
||||
|
class MatchSpreadPage extends StatelessWidget { |
||||
|
const MatchSpreadPage({super.key}); |
||||
|
|
||||
|
@override |
||||
|
Widget build(BuildContext context) { |
||||
|
return GetX<SpreadController>( |
||||
|
init: SpreadController(), |
||||
|
builder: (controller){ |
||||
|
return Scaffold( |
||||
|
appBar: PageAppbar(title: "入驻加盟"), |
||||
|
body: SingleChildScrollView( |
||||
|
child: Container( |
||||
|
padding: EdgeInsets.symmetric(vertical: 10.w, horizontal: 12.w), |
||||
|
child: Column( |
||||
|
children: [ |
||||
|
SingleChildScrollView( |
||||
|
scrollDirection: Axis.horizontal, |
||||
|
child: Row( |
||||
|
children: [ |
||||
|
...controller.roseList.asMap().entries.map((entry){ |
||||
|
return PayItem(item: entry.value, active: controller.activePay.value, index: entry.key, changeActive: controller.changePayActive); |
||||
|
}), |
||||
|
], |
||||
|
), |
||||
|
), |
||||
|
SizedBox(height: 32.w), |
||||
|
Row( |
||||
|
children: [ |
||||
|
Text('红娘权益', style: TextStyle(fontSize: 16, fontWeight: FontWeight.bold)), |
||||
|
], |
||||
|
), |
||||
|
SizedBox(height: 24.w,), |
||||
|
Wrap( |
||||
|
spacing: 10.w, |
||||
|
runSpacing: 18.w, |
||||
|
children: [ |
||||
|
...controller.list2.map((e){ |
||||
|
return SizedBox( |
||||
|
width: 80.w, |
||||
|
child: Column( |
||||
|
mainAxisAlignment: MainAxisAlignment.center, |
||||
|
crossAxisAlignment: CrossAxisAlignment.center, |
||||
|
children: [ |
||||
|
Icon(TDIcons.help_circle, color: Colors.orange, size: 36), |
||||
|
SizedBox(height: 8.w,), |
||||
|
Text(e['title'], style: TextStyle(fontSize: 14, color: Color(0xFF999999))), |
||||
|
Row( |
||||
|
mainAxisAlignment: MainAxisAlignment.center, |
||||
|
crossAxisAlignment: CrossAxisAlignment.center, |
||||
|
children: [ |
||||
|
if(e['unit'] != null)Text(e['unit'], style: TextStyle(fontSize: 14)), |
||||
|
Text(e['desc'], style: TextStyle(fontSize: 14, color: Color(0xFF999999))), |
||||
|
], |
||||
|
) |
||||
|
], |
||||
|
), |
||||
|
); |
||||
|
}), |
||||
|
], |
||||
|
), |
||||
|
], |
||||
|
), |
||||
|
), |
||||
|
), |
||||
|
bottomNavigationBar: SafeArea( |
||||
|
child: Container( |
||||
|
height: 60, |
||||
|
padding: EdgeInsets.symmetric(vertical: 5.w, horizontal: 16.w), |
||||
|
child: TDButton( |
||||
|
text: '立即加入', |
||||
|
width: MediaQuery.of(context).size.width - 40, |
||||
|
size: TDButtonSize.large, |
||||
|
type: TDButtonType.fill, |
||||
|
shape: TDButtonShape.round, |
||||
|
style: TDButtonStyle( |
||||
|
textColor: Colors.white, |
||||
|
backgroundColor: Color(0xFFEE811B), |
||||
|
), |
||||
|
activeStyle: TDButtonStyle( |
||||
|
textColor: Colors.white, |
||||
|
backgroundColor: Color(0xC3EE811B), |
||||
|
), |
||||
|
onTap: (){ |
||||
|
controller.submitOrder(); |
||||
|
}, |
||||
|
), |
||||
|
) |
||||
|
), |
||||
|
); |
||||
|
}, |
||||
|
); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
|
||||
|
class PayItem extends StatefulWidget { |
||||
|
final RoseData item; |
||||
|
final int active; |
||||
|
final int index; |
||||
|
final void Function(int) changeActive; |
||||
|
const PayItem({super.key, required this.item, required this.active, required this.index, required this.changeActive, }); |
||||
|
|
||||
|
@override |
||||
|
State<PayItem> createState() => _PayItemState(); |
||||
|
} |
||||
|
|
||||
|
class _PayItemState extends State<PayItem> { |
||||
|
@override |
||||
|
Widget build(BuildContext context) { |
||||
|
return Stack( |
||||
|
children: [ |
||||
|
Container( |
||||
|
width: 124.w, |
||||
|
height: 160.h, |
||||
|
margin: const EdgeInsets.only(right: 10), |
||||
|
decoration: BoxDecoration( |
||||
|
borderRadius: BorderRadius.all(Radius.circular(6.w)), |
||||
|
color: widget.active == widget.index ? const Color.fromRGBO(239, 19, 46, .05) : Colors.white, |
||||
|
border: widget.active == widget.index ? Border.all(width: 1, color: const Color(0xFFEE811B)) : Border.all(width: 1, color: const Color(0xFFEEEEEE)) |
||||
|
), |
||||
|
child: Column( |
||||
|
mainAxisAlignment: MainAxisAlignment.center, |
||||
|
children: [ |
||||
|
const SizedBox(height: 32), |
||||
|
Row( |
||||
|
mainAxisAlignment: MainAxisAlignment.center, |
||||
|
crossAxisAlignment: CrossAxisAlignment.end, |
||||
|
children: [ |
||||
|
Container( |
||||
|
padding: EdgeInsets.only(bottom: 5), |
||||
|
child: Text( |
||||
|
"¥", |
||||
|
style: TextStyle( |
||||
|
fontSize: 16.w, |
||||
|
color: Color(0xFFEE811B), |
||||
|
fontWeight: FontWeight.bold |
||||
|
), |
||||
|
), |
||||
|
), |
||||
|
const SizedBox(width: 2), |
||||
|
Text( |
||||
|
"${widget.item.unitSellingPrice}", |
||||
|
style: TextStyle( |
||||
|
fontSize: 26.w, |
||||
|
color: Color(0xFFEE811B), |
||||
|
fontWeight: FontWeight.bold |
||||
|
), |
||||
|
), |
||||
|
], |
||||
|
), |
||||
|
TDText("¥${widget.item.unitOriginalPrice}", isTextThrough: true, style: TextStyle(color: Color(0xFFCCCCCC)),), |
||||
|
const SizedBox(height: 18), |
||||
|
Text( |
||||
|
"有效期:${widget.item.validityPeriodDays}天", |
||||
|
style: TextStyle( |
||||
|
fontSize: 14.w, |
||||
|
color: Color(0xFF333333), |
||||
|
fontWeight: FontWeight.bold |
||||
|
), |
||||
|
), |
||||
|
], |
||||
|
), |
||||
|
), |
||||
|
Positioned( |
||||
|
left: 0, |
||||
|
top: 0, |
||||
|
child: Container( |
||||
|
padding: EdgeInsets.symmetric(vertical: 2.w, horizontal: 6.w), |
||||
|
decoration: BoxDecoration( |
||||
|
borderRadius: BorderRadius.only( |
||||
|
topLeft: Radius.circular(6.w), |
||||
|
bottomRight: Radius.circular(6.w), |
||||
|
), |
||||
|
color: widget.active == widget.index ? const Color(0xFFEE811B) : Color(0xFFCCCCCC) |
||||
|
), |
||||
|
child: Center( |
||||
|
child: Text(widget.item.productTitle!.replaceAll('加盟费', ''), style: TextStyle(fontSize: 12, color: Colors.white)), |
||||
|
), |
||||
|
), |
||||
|
) |
||||
|
], |
||||
|
).onTap((){ |
||||
|
widget.changeActive(widget.index); |
||||
|
}); |
||||
|
} |
||||
|
} |
||||
Write
Preview
Loading…
Cancel
Save