diff --git a/lib/controller/discover/room_controller.dart b/lib/controller/discover/room_controller.dart index 7b57bbb..b952297 100644 --- a/lib/controller/discover/room_controller.dart +++ b/lib/controller/discover/room_controller.dart @@ -9,6 +9,7 @@ import 'package:dating_touchme_app/network/network_service.dart'; import 'package:dating_touchme_app/rtc/rtc_manager.dart'; import 'package:dating_touchme_app/rtc/rtm_manager.dart'; import 'package:dating_touchme_app/service/live_chat_message_service.dart'; +import 'package:flutter/material.dart'; import 'package:flutter_smart_dialog/flutter_smart_dialog.dart'; import 'package:get/get.dart'; import 'package:permission_handler/permission_handler.dart'; @@ -16,6 +17,7 @@ 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'; +import '../../pages/setting/match_spread_page.dart'; // 当前角色 enum CurrentRole { @@ -27,7 +29,8 @@ enum CurrentRole { } /// 直播房间相关控制器 -class RoomController extends GetxController { +class RoomController extends GetxController with WidgetsBindingObserver { + RoomController({NetworkService? networkService}) : _networkService = networkService ?? Get.find(); @@ -53,6 +56,7 @@ class RoomController extends GetxController { @override void onInit() { super.onInit(); + WidgetsBinding.instance.addObserver(this); matchmakerFlag.value = GlobalData().userData!.matchmakerFlag!; // 注册消息监听 _registerMessageListener(); @@ -60,9 +64,32 @@ class RoomController extends GetxController { loadGiftProducts(); } + @override + void didChangeAppLifecycleState(AppLifecycleState state) { + if(state == AppLifecycleState.resumed){ + // print('_handleAppResumed'); + } + switch (state) { + case AppLifecycleState.resumed: + print('_handleAppResumed'); + break; + case AppLifecycleState.paused: + // _handleAppPaused(); + print('_handleAppPaused'); + break; + case AppLifecycleState.inactive: + // _handleAppInactive(); + print('_handleAppInactive'); + break; + default: + break; + } + } + @override void onClose() { super.onClose(); + WidgetsBinding.instance.removeObserver(this); // 移除消息监听 _messageService.unregisterMessageListener(); } @@ -418,13 +445,15 @@ class RoomController extends GetxController { } } - void registerMatch(){ + void registerMatch() async { if(GlobalData().userData!.identityCard != null && GlobalData().userData!.identityCard!.isNotEmpty){ - Get.to(() => MatchLeaguePage()); + await Get.to(() => MatchSpreadPage()); } else { SmartDialog.showToast('请先进行实名认证'); - Get.to(() => RealNamePage(type: 1)); + await Get.to(() => RealNamePage(type: 1)); } + print(455); + matchmakerFlag.value = GlobalData().userData!.matchmakerFlag!; } } diff --git a/lib/controller/mine/auth_controller.dart b/lib/controller/mine/auth_controller.dart index 042d6c1..f5b95f5 100644 --- a/lib/controller/mine/auth_controller.dart +++ b/lib/controller/mine/auth_controller.dart @@ -4,6 +4,7 @@ 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 '../../pages/setting/match_spread_page.dart'; import '../global.dart'; class AuthController extends GetxController { @@ -114,7 +115,7 @@ class AuthController extends GetxController { SmartDialog.showToast('认证成功'); if(type == 1){ // 进入认证成功之后的下一个页面; - Get.off(() => MatchLeaguePage()); + Get.off(() => MatchSpreadPage()); } else { Get.back(result: 3); } diff --git a/lib/controller/mine/league_controller.dart b/lib/controller/mine/league_controller.dart index 0e2d782..a3acee4 100644 --- a/lib/controller/mine/league_controller.dart +++ b/lib/controller/mine/league_controller.dart @@ -81,7 +81,6 @@ class LeagueController extends GetxController { } if (phoneNumber.value.isEmpty) { SmartDialog.showToast('请输入手机号'); - Get.off(() => MatchSpreadPage()); return; } if (verificationCode.value.isEmpty) { diff --git a/lib/controller/setting/spread_controller.dart b/lib/controller/setting/spread_controller.dart index d85aeea..59d2bbc 100644 --- a/lib/controller/setting/spread_controller.dart +++ b/lib/controller/setting/spread_controller.dart @@ -1,10 +1,12 @@ +import 'package:dating_touchme_app/controller/global.dart'; import 'package:dating_touchme_app/model/mine/rose_data.dart'; import 'package:dating_touchme_app/network/user_api.dart'; +import 'package:flutter/material.dart'; import 'package:flutter_smart_dialog/flutter_smart_dialog.dart'; import 'package:fluwx/fluwx.dart'; import 'package:get/get.dart'; -class SpreadController extends GetxController { +class SpreadController extends GetxController with WidgetsBindingObserver { // UserApi实例 late UserApi _userApi; @@ -33,13 +35,56 @@ class SpreadController extends GetxController { {'title': '次年续签', 'unit': '90%', 'desc': '减免', 'enable': 1, 'value': 0, 'icon': 'icon-right8'} ].obs; + // 倒计时秒数 + final countdownSeconds = 0.obs; + @override void onInit() { super.onInit(); + WidgetsBinding.instance.addObserver(this); _userApi = Get.find(); getRoseList(); } + @override + void didChangeAppLifecycleState(AppLifecycleState state) { + if(state == AppLifecycleState.resumed){ + if (countdownSeconds.value > 0) { + startCountdown(); + } + } + } + + // 开始倒计时 + void startCountdown() async { + try{ + final response = await _userApi.getAuditMatchmaker(); + if (response.data.isSuccess && response.data.data != null) { + bool audit = response.data.data['needAudit']; + if(audit){ + Future.delayed(const Duration(milliseconds: 300), () { + if (countdownSeconds.value > 0) { + countdownSeconds.value--; + startCountdown(); + } + }); + } else { + countdownSeconds.value = 0; + GlobalData().userData!.matchmakerFlag = true; + Get.back(result: 1); + } + } + } catch (e) { + print('87$e'); + } + } + + @override + void onClose() { + WidgetsBinding.instance.removeObserver(this); + super.onClose(); + } + getRoseList() async { try{ final response = await _userApi.getMatchmakerFee(); @@ -65,10 +110,9 @@ class SpreadController extends GetxController { username: 'gh_9ea8d46add6f', path:"pages/index/index?amount=${roseList[activePay.value].unitSellingPrice}&paymentOrderId=${data!.paymentOrderId}&url=match-fee" )); - + countdownSeconds.value = 3; SmartDialog.showToast('开始支付'); } else { - // 响应失败,抛出异常 throw Exception(response.data.message ?? '获取数据失败'); } diff --git a/lib/network/api_urls.dart b/lib/network/api_urls.dart index 003242f..cb080a0 100644 --- a/lib/network/api_urls.dart +++ b/lib/network/api_urls.dart @@ -88,4 +88,8 @@ class ApiUrls { // 后续可以在此添加更多API端点 static const String listMatchmakerProduct = 'dating-agency-mall/user/page/product/by/matchmaker'; + + static const String auditMatchmakerResult = + 'dating-agency-uec/user/need-audit/matchmaker-audit'; + } diff --git a/lib/network/user_api.dart b/lib/network/user_api.dart index 2b986d5..7bde7ea 100644 --- a/lib/network/user_api.dart +++ b/lib/network/user_api.dart @@ -188,4 +188,8 @@ abstract class UserApi { @GET(ApiUrls.listMatchmakerProduct) Future>>> getMatchmakerFee(); + + @GET(ApiUrls.auditMatchmakerResult) + Future>> getAuditMatchmaker(); + } diff --git a/lib/network/user_api.g.dart b/lib/network/user_api.g.dart index d2bab25..bde954b 100644 --- a/lib/network/user_api.g.dart +++ b/lib/network/user_api.g.dart @@ -1167,6 +1167,37 @@ class _UserApi implements UserApi { return httpResponse; } + @override + Future>> getAuditMatchmaker() async { + final _extra = {}; + final queryParameters = {}; + final _headers = {}; + const Map? _data = null; + final _options = _setStreamType>>( + Options(method: 'GET', headers: _headers, extra: _extra) + .compose( + _dio.options, + 'dating-agency-uec/user/need-audit/matchmaker-audit', + 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) => json as dynamic, + ); + } 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/discover_page.dart b/lib/pages/discover/discover_page.dart index ccfedf7..462411f 100644 --- a/lib/pages/discover/discover_page.dart +++ b/lib/pages/discover/discover_page.dart @@ -46,6 +46,12 @@ class _DiscoverPageState extends State roomController.matchmakerFlag.value = GlobalData().userData!.matchmakerFlag!; } + @override + void reassemble() { + super.reassemble(); + print('reassemble 调用 - 热重载时触发'); + } + @override void dispose() { _pageController.dispose(); diff --git a/lib/pages/setting/match_spread_page.dart b/lib/pages/setting/match_spread_page.dart index ab39f08..d4b9ebb 100644 --- a/lib/pages/setting/match_spread_page.dart +++ b/lib/pages/setting/match_spread_page.dart @@ -35,13 +35,13 @@ class MatchSpreadPage extends StatelessWidget { ), ), SizedBox(height: 32.w), - Row( + if(controller.roseList.isNotEmpty)Row( children: [ Text('红娘权益', style: TextStyle(fontSize: 16, fontWeight: FontWeight.bold)), ], ), SizedBox(height: 24.w,), - Wrap( + if(controller.roseList.isNotEmpty)Wrap( spacing: 10.w, runSpacing: 18.w, children: [ @@ -73,7 +73,7 @@ class MatchSpreadPage extends StatelessWidget { ), ), ), - bottomNavigationBar: SafeArea( + bottomNavigationBar: controller.roseList.isNotEmpty ? SafeArea( child: Container( height: 60, padding: EdgeInsets.symmetric(vertical: 5.w, horizontal: 16.w), @@ -96,7 +96,7 @@ class MatchSpreadPage extends StatelessWidget { }, ), ) - ), + ) : null, ); }, );