12 changed files with 680 additions and 133 deletions
Split 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