Browse Source

no message

ios
ZHR007 4 months ago
parent
commit
fd51dd14e2
9 changed files with 302 additions and 47 deletions
  1. 32
      lib/controller/discover/room_controller.dart
  2. 10
      lib/controller/mine/auth_controller.dart
  3. 112
      lib/controller/mine/league_controller.dart
  4. 1
      lib/controller/mine/mine_controller.dart
  5. 57
      lib/pages/discover/discover_page.dart
  6. 4
      lib/pages/mine/auth_center_page.dart
  7. 5
      lib/pages/mine/real_name_page.dart
  8. 118
      lib/pages/setting/match_league_page.dart
  9. 10
      lib/widget/live/live_room_notice_chat_panel.dart

32
lib/controller/discover/room_controller.dart

@ -14,6 +14,8 @@ import 'package:get/get.dart';
import 'package:permission_handler/permission_handler.dart';
import '../../model/live/live_chat_message.dart';
import '../../pages/mine/real_name_page.dart';
import '../../pages/setting/match_league_page.dart';
//
enum CurrentRole {
@ -31,8 +33,8 @@ class RoomController extends GetxController {
final NetworkService _networkService;
CurrentRole currentRole = CurrentRole.normalUser;
bool isLive = false;
final userData = GlobalData().userData.obs;
var isLive = false.obs;
var matchmakerFlag = false.obs;
///
final Rxn<RtcChannelData> rtcChannel = Rxn<RtcChannelData>();
final Rxn<RtcChannelDetail> rtcChannelDetail = Rxn<RtcChannelDetail>();
@ -46,9 +48,12 @@ class RoomController extends GetxController {
///
final LiveChatMessageService _messageService = LiveChatMessageService.instance;
// matchmakerFlag
@override
void onInit() {
super.onInit();
matchmakerFlag.value = GlobalData().userData!.matchmakerFlag!;
//
_registerMessageListener();
//
@ -101,6 +106,9 @@ class RoomController extends GetxController {
/// RTC
Future<void> createRtcChannel() async {
if(isLive.value){
return;
}
final granted = await _ensureRtcPermissions();
if (!granted) return;
@ -110,7 +118,7 @@ class RoomController extends GetxController {
if (base.isSuccess && base.data != null) {
rtcChannel.value = base.data;
currentRole = CurrentRole.broadcaster;
isLive = true;
isLive.value = true;
await _joinRtcChannel(
base.data!.token,
base.data!.channelId,
@ -208,14 +216,14 @@ class RoomController extends GetxController {
femaleInfo: role == CurrentRole.femaleAudience ? userInfo : null,
);
rtcChannelDetail.value = newDetail;
isLive = true;
isLive.value = true;
}
Future<void> leaveChat() async {
final data = {'channelId': RTCManager.instance.currentChannelId};
final response = await _networkService.rtcApi.disconnectRtcChannel(data);
if (response.data.isSuccess) {
isLive = false;
isLive.value = false;
await RTCManager.instance.unpublish(currentRole);
if (currentRole == CurrentRole.maleAudience) {
final newDetail = RtcChannelDetail(
@ -297,8 +305,8 @@ class RoomController extends GetxController {
);
}
}
isLive = false;
isLive.value = false;
if (currentRole == CurrentRole.maleAudience ||
currentRole == CurrentRole.femaleAudience) {
await RTCManager.instance.unpublish(currentRole);
@ -409,4 +417,14 @@ class RoomController extends GetxController {
}
}
}
void registerMatch(){
if(GlobalData().userData!.identityCard != null && GlobalData().userData!.identityCard!.isNotEmpty){
Get.to(() => MatchLeaguePage());
} else {
SmartDialog.showToast('请先进行实名认证');
Get.to(() => RealNamePage(type: 1));
}
}
}

10
lib/controller/mine/auth_controller.dart

@ -3,6 +3,7 @@ import 'package:get/get.dart';
import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
import '../../generated/assets.dart';
import '../../network/user_api.dart';
import '../../pages/setting/match_league_page.dart';
import '../global.dart';
class AuthController extends GetxController {
@ -82,7 +83,7 @@ class AuthController extends GetxController {
dataList.assignAll(updatedMessages);
}
Future<void> startAuthing() async {
Future<void> startAuthing(int type) async {
if (name.value.isEmpty) {
SmartDialog.showToast('请输入姓名');
return;
@ -111,7 +112,12 @@ class AuthController extends GetxController {
if (response.data.isSuccess) {
GlobalData().userData!.identityCard = idcard.value;
SmartDialog.showToast('认证成功');
Get.back(result: 3);
if(type == 1){
// ;
Get.off(() => MatchLeaguePage());
} else {
Get.back(result: 3);
}
} else {
SmartDialog.showToast(response.data.message);
}

112
lib/controller/mine/league_controller.dart

@ -0,0 +1,112 @@
import 'dart:async';
import 'package:get/get.dart';
import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
import '../../network/user_api.dart';
import '../global.dart';
class LeagueController extends GetxController {
late UserApi _userApi;
final phone = ''.obs;
//
final phoneNumber = ''.obs;
//
final verificationCode = ''.obs;
//
final isSendingCode = false.obs;
//
final countdownSeconds = 0.obs;
final agree = false.obs;
@override
void onInit() {
super.onInit();
// UserApi
_userApi = Get.find<UserApi>();
phone.value = GlobalData().userData!.phone!;
}
//
Future<void> getVerificationCode() async {
if (countdownSeconds.value > 0) {
return;
}
//
if (phoneNumber.value.isEmpty || phoneNumber.value.length != 11) {
SmartDialog.showToast('请输入正确的手机号');
return;
}
isSendingCode.value = true;
try {
//
final params = {
'purpose': 2, //
'verifiableAccount': phoneNumber.value,
'verifiableAccountType': 1, //
};
// UserApi中的验证码接口
final response = await _userApi.getVerificationCode(params);
//
if (response.data.isSuccess) {
// 使
SmartDialog.showToast('验证码发送成功');
//
countdownSeconds.value = 60;
startCountdown();
} else {
SmartDialog.showToast(response.data.message);
}
} catch (e) {
SmartDialog.showToast('网络请求失败,请重试');
} finally {
isSendingCode.value = false;
}
}
//
void startCountdown() {
Future.delayed(const Duration(seconds: 1), () {
if (countdownSeconds.value > 0) {
countdownSeconds.value--;
startCountdown();
} else {
isSendingCode.value = false;
}
});
}
Future<void> changePhone() async {
if(isSendingCode.value){
return;
}
if (phoneNumber.value.isEmpty) {
SmartDialog.showToast('请输入手机号');
return;
}
if (verificationCode.value.isEmpty) {
SmartDialog.showToast('请输入验证码');
return;
}
isSendingCode.value = true;
try {
//
SmartDialog.showLoading(msg: '处理中');
final param = { 'phone': phoneNumber.value, 'captcha': verificationCode.value};
final response = await _userApi.updatePhone(param);
//
if (response.data.isSuccess) {
GlobalData().userData!.phone = phoneNumber.value;
SmartDialog.showToast('更换成功');
Get.back(result: 1);
} else {
SmartDialog.showToast(response.data.message);
}
} catch (e) {
SmartDialog.showToast('网络请求失败,请检查网络连接');
} finally {
SmartDialog.dismiss();
isSendingCode.value = true;
}
}
}

1
lib/controller/mine/mine_controller.dart

@ -39,6 +39,7 @@ class MineController extends GetxController {
super.onInit();
userData.value = GlobalData().userData;
userId.value = GlobalData().userId;
print(41);
}

57
lib/pages/discover/discover_page.dart

@ -6,6 +6,10 @@ import 'package:dating_touchme_app/pages/discover/party_page.dart';
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get.dart';
import 'package:get_storage/get_storage.dart';
import 'package:tdesign_flutter/tdesign_flutter.dart';
import '../../controller/global.dart';
class DiscoverPage extends StatefulWidget {
const DiscoverPage({super.key});
@ -39,6 +43,7 @@ class _DiscoverPageState extends State<DiscoverPage>
roomController = Get.put(RoomController());
}
_pageController = PageController(initialPage: 0);
roomController.matchmakerFlag.value = GlobalData().userData!.matchmakerFlag!;
}
@override
@ -60,37 +65,33 @@ class _DiscoverPageState extends State<DiscoverPage>
),
Container(
padding: EdgeInsets.symmetric(horizontal: 12.w),
// constraints: BoxConstraints(minHeight: ScreenUtil().setHeight(800)),
child: Column(
children: [
HomeAppbar(
topNav: topNav,
changeNav: changeNav,
activeIndex: active,
right: InkWell(
onTap: () async {
await roomController.createRtcChannel();
},
child: Container(
width: 52.w,
height: 20.w,
decoration: BoxDecoration(
borderRadius: BorderRadius.all(Radius.circular(20.w)),
color: const Color.fromRGBO(108, 105, 244, 1),
),
child: Center(
child: Text(
"申请红娘",
style: TextStyle(
fontSize: 10.w,
color: Colors.white,
fontWeight: FontWeight.w500,
),
),
),
Obx(() {
return HomeAppbar(
topNav: topNav,
changeNav: changeNav,
activeIndex: active,
right: TDButton(
text: roomController.matchmakerFlag.value ? '开始直播' : '申请红娘',
width: 60.w,
height: 24.h,
padding: EdgeInsetsGeometry.symmetric(horizontal: 4.w),
size: TDButtonSize.small,
type: TDButtonType.fill,
shape: TDButtonShape.round,
theme: roomController.matchmakerFlag.value ? TDButtonTheme.danger : TDButtonTheme.primary,
textStyle: TextStyle(fontSize: 10.w),
onTap: () async {
if(roomController.matchmakerFlag.value){
await roomController.createRtcChannel();
} else {
roomController.registerMatch();
}
},
),
),
),
);
}),
Expanded(
child: PageView(
controller: _pageController,

4
lib/pages/mine/auth_center_page.dart

@ -6,8 +6,6 @@ import 'package:get/get.dart';
import '../../components/page_appbar.dart';
import '../../controller/mine/auth_controller.dart';
import '../../extension/router_service.dart';
import '../../generated/assets.dart';
import 'edit_info_page.dart';
import 'phone_page.dart';
@ -113,7 +111,7 @@ class AuthCenterPage extends StatelessWidget {
if(item.authed){
return;
}
await Get.to(() => RealNamePage());
await Get.to(() => RealNamePage(type: 0));
}
controller.loadInitialData();
});

5
lib/pages/mine/real_name_page.dart

@ -8,7 +8,8 @@ import '../../components/page_appbar.dart';
import '../../controller/mine/auth_controller.dart';
class RealNamePage extends StatelessWidget {
RealNamePage({super.key});
final int type;
RealNamePage({super.key, required this.type});
final AuthController controller = Get.put(AuthController());
//
@override
@ -188,7 +189,7 @@ class RealNamePage extends StatelessWidget {
backgroundColor: Color(0xC37562F9),
),
onTap: (){
controller.startAuthing();
controller.startAuthing(type);
},
),
],

118
lib/pages/setting/match_league_page.dart

@ -0,0 +1,118 @@
import 'package:dating_touchme_app/extension/ex_widget.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:tdesign_flutter/tdesign_flutter.dart';
import '../../components/page_appbar.dart';
import '../../controller/mine/league_controller.dart';
class MatchLeaguePage extends StatelessWidget {
MatchLeaguePage({super.key});
final LeagueController controller = Get.put(LeagueController());
//
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Color(0xffFFFFFF),
appBar: PageAppbar(title: "填写申请资料"),
body: Column(
children: [
SizedBox(height: 12),
TDInput(
type: TDInputType.cardStyle,
inputType: TextInputType.phone,
maxLength: 11,
cardStyle: TDCardStyle.topText,
width: MediaQuery.of(context).size.width - 40,
hintText: '请输入你的手机号',
onChanged: (text) {
}
),
SizedBox(height: 24),
TDInput(
type: TDInputType.cardStyle,
inputType: TextInputType.number,
maxLength: 6,
cardStyle: TDCardStyle.topText,
width: MediaQuery.of(context).size.width - 40,
hintText: '请输入验证码',
onChanged: (text) {
controller.verificationCode.value = text;
},
rightBtn: SizedBox(
width: 100,
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Padding(
padding: const EdgeInsets.only(right: 10),
child: Container(
width: 0.5,
height: 24,
color: TDTheme.of(context).grayColor3,
),
),
controller.countdownSeconds.value > 0 ?
TDText('${controller.countdownSeconds.value}秒后重试', textColor: TDTheme.of(context).fontGyColor4)
: TDText('获取验证码', textColor: Color(0xFF7562F9)),
],
),
),
needClear: false,
onBtnTap: () {
controller.getVerificationCode();
}
),
SizedBox(height: 24),
//
Row(
crossAxisAlignment: CrossAxisAlignment.center, //
mainAxisAlignment: MainAxisAlignment.start,
children: [
SizedBox(width: 8),
Obx(() => Checkbox(
value: controller.agree.value,
onChanged: (value) {
controller.agree.value = value ?? false;
},
activeColor: Color(0xff7562F9),
side: const BorderSide(color: Colors.grey),
shape: const CircleBorder(),
materialTapTargetSize: MaterialTapTargetSize.shrinkWrap,
)),
Text('阅读并同意', style: TextStyle( fontSize: 14, color: Colors.black54 )),
Text(
'《趣招亲红娘代理协议》',
style: TextStyle( fontSize: 14, color: Color(0xFFEE811B) )
).onTap((){
}),
],
),
SizedBox(height: 32),
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(0xFF7562F9),
),
activeStyle: TDButtonStyle(
textColor: Colors.white,
backgroundColor: Color(0xC37562F9),
),
onTap: (){
// controller.startAuthing();
},
),
],
),
);
}
}

10
lib/widget/live/live_room_notice_chat_panel.dart

@ -78,7 +78,7 @@ class _LiveRoomNoticeChatPanelState extends State<LiveRoomNoticeChatPanel> {
Obx((){
if(controller.rtcChannelDetail.value?.maleInfo == null && GlobalData().userData?.genderCode == 0 && controller.currentRole != CurrentRole.broadcaster ||
controller.rtcChannelDetail.value?.femaleInfo == null && GlobalData().userData?.genderCode == 1 && controller.currentRole != CurrentRole.broadcaster ||
controller.isLive && controller.currentRole != CurrentRole.broadcaster){
controller.isLive.value && controller.currentRole != CurrentRole.broadcaster){
return Container(
width: 120.w,
height: 55.w,
@ -86,7 +86,7 @@ class _LiveRoomNoticeChatPanelState extends State<LiveRoomNoticeChatPanel> {
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(10.w),
gradient: LinearGradient(
colors: controller.isLive ? [Colors.grey, Colors.grey] : [Color(0xFF7C63FF), Color(0xFF987CFF)],
colors: controller.isLive.value ? [Colors.grey, Colors.grey] : [Color(0xFF7C63FF), Color(0xFF987CFF)],
begin: Alignment.topLeft,
end: Alignment.bottomRight,
),
@ -103,7 +103,7 @@ class _LiveRoomNoticeChatPanelState extends State<LiveRoomNoticeChatPanel> {
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text(
controller.isLive ? '申请连麦中' : '免费连麦',
controller.isLive.value ? '申请连麦中' : '免费连麦',
style: TextStyle(
fontSize: 13.w,
color: Colors.white,
@ -111,7 +111,7 @@ class _LiveRoomNoticeChatPanelState extends State<LiveRoomNoticeChatPanel> {
),
),
SizedBox(height: 2.w),
controller.isLive ? const SizedBox() :Text(
controller.isLive.value ? const SizedBox() :Text(
'剩余2张相亲卡',
style: TextStyle(
fontSize: 9.w,
@ -123,7 +123,7 @@ class _LiveRoomNoticeChatPanelState extends State<LiveRoomNoticeChatPanel> {
],
),
).onTap(() async{
if(controller.isLive){
if(controller.isLive.value){
await controller.leaveChat();
}else{
await controller.joinChat(GlobalData().userData?.genderCode == 0 ? CurrentRole.maleAudience : CurrentRole.femaleAudience);

Loading…
Cancel
Save