diff --git a/lib/features/events/pages/page_event_info.dart b/lib/features/events/pages/page_event_info.dart index 9e2ee59..620b093 100644 --- a/lib/features/events/pages/page_event_info.dart +++ b/lib/features/events/pages/page_event_info.dart @@ -11,8 +11,6 @@ import 'package:recording_tool/shared/widgets/widgets.dart'; class EventInfoPage extends ConsumerStatefulWidget { const EventInfoPage({super.key, required this.playerId}); final String playerId; - static const mockRtmpUrl = - 'rtmp://192.168.1.245:19090/蔡依婷vs夏志豪_空中格斗赛_高中组/蔡依婷vs夏志豪_空中格斗赛_高中组'; @override ConsumerState createState() => _EventInfoPageState(); @@ -22,15 +20,11 @@ class _EventInfoPageState extends ConsumerState { @override void initState() { super.initState(); - WidgetsBinding.instance.addPostFrameCallback((_) { - if (!mounted) return; - ref.read(eventInfoProvider.notifier).loadRegistrationList(); - }); } Future onItemTap(EventRegistrationItem item) async { - debugPrint('item tapped: ${item.itemName}'); - await ref.read(eventInfoProvider.notifier).requestStreamKey(item); + // debugPrint('item tapped: ${item.itemName}'); + // await ref.read(eventInfoProvider.notifier).requestStreamKey(item); if (!mounted) return; // final profile = ref.read(eventInfoProvider).profile; @@ -182,17 +176,13 @@ class _ScheduleList extends StatelessWidget { @override Widget build(BuildContext context) { - if (state.isLoading) { - return const Center(child: CircularProgressIndicator()); - } - if (state.items.isEmpty) { return Center( child: Column( mainAxisSize: MainAxisSize.min, children: [ Text( - state.errorMessage ?? '暂无赛事报名信息', + '暂无赛事报名信息', textAlign: TextAlign.center, style: TextStyle(fontSize: 18.sp, color: const Color(0xFF2F2F2F)), ), diff --git a/lib/features/events/state/state_event_info.dart b/lib/features/events/state/state_event_info.dart index 4e5a23c..7fe226d 100644 --- a/lib/features/events/state/state_event_info.dart +++ b/lib/features/events/state/state_event_info.dart @@ -2,17 +2,13 @@ import 'package:recording_tool/features/events/model/model_event_info.dart'; class EventInfoState { const EventInfoState({ - this.isLoading = false, this.isRequestingStreamKey = false, - this.errorMessage, this.profile = const EventProfile(name: '', phone: '', eventTitle: '赛事信息'), this.total = 0, this.items = const [], }); - final bool isLoading; final bool isRequestingStreamKey; - final String? errorMessage; final EventProfile profile; final int total; final List items; @@ -21,21 +17,14 @@ class EventInfoState { items.isEmpty ? profile.eventTitle : items.first.eventName; EventInfoState copyWith({ - bool? isLoading, bool? isRequestingStreamKey, - String? errorMessage, - bool clearErrorMessage = false, EventProfile? profile, int? total, List? items, }) { return EventInfoState( - isLoading: isLoading ?? this.isLoading, isRequestingStreamKey: isRequestingStreamKey ?? this.isRequestingStreamKey, - errorMessage: clearErrorMessage - ? null - : (errorMessage ?? this.errorMessage), profile: profile ?? this.profile, total: total ?? this.total, items: items ?? this.items, diff --git a/lib/features/events/view_model/view_model_event_info.dart b/lib/features/events/view_model/view_model_event_info.dart index d8e6051..997a5cf 100644 --- a/lib/features/events/view_model/view_model_event_info.dart +++ b/lib/features/events/view_model/view_model_event_info.dart @@ -5,6 +5,7 @@ import 'package:recording_tool/core/network/api_exception.dart'; import 'package:recording_tool/features/events/model/model_event_info.dart'; import 'package:recording_tool/features/events/server/server_events.dart'; import 'package:recording_tool/features/events/state/state_event_info.dart'; +import 'package:recording_tool/shared/widgets/app_toast.dart'; final eventInfoProvider = StateNotifierProvider((ref) { @@ -15,44 +16,42 @@ class EventInfoViewModel extends StateNotifier { EventInfoViewModel(this._ref) : super(const EventInfoState()); static const defaultRegistrationRequest = PlayerRegistrationListReq( - userId: '74300708945530955', + userId: '', status: '', ); - static const _fallbackEventId = '10224'; - static const _fallbackItemId = '2318'; - static const _fallbackStreamUserId = '74300708949725207'; + static const _fallbackEventId = ''; + static const _fallbackItemId = ''; + static const _fallbackStreamUserId = ''; final Ref _ref; - Future loadRegistrationList({ + Future loadRegistrationList({ PlayerRegistrationListReq request = defaultRegistrationRequest, }) async { - state = state.copyWith(isLoading: true, clearErrorMessage: true); + if (request.userId.isEmpty) { + return false; + } try { final result = await _ref .read(eventsServerProvider) .fetchPlayerRegistrationList(request); + debugPrint('报名列表请求成功: $result'); state = state.copyWith( - isLoading: false, profile: result.toProfile(), total: result.total, items: result.items, - clearErrorMessage: true, ); - } on ApiException catch (error) { - state = state.copyWith(isLoading: false, errorMessage: error.message); + return true; } catch (error) { debugPrint('报名列表请求失败: $error'); - state = state.copyWith(isLoading: false, errorMessage: '报名列表加载失败'); + AppToast.show('报名列表加载失败'); + return false; } } Future requestStreamKey(EventRegistrationItem item) async { - state = state.copyWith( - isRequestingStreamKey: true, - clearErrorMessage: true, - ); + state = state.copyWith(isRequestingStreamKey: true); final req = StreamKeyReq( eventId: item.eventId.isNotEmpty ? item.eventId : _fallbackEventId, itemId: item.itemId.isNotEmpty ? item.itemId : _fallbackItemId, @@ -64,22 +63,15 @@ class EventInfoViewModel extends StateNotifier { .read(eventsServerProvider) .fetchStreamKey(req); debugPrint('推流 Key 接口响应: $response'); - state = state.copyWith( - isRequestingStreamKey: false, - clearErrorMessage: true, - ); + state = state.copyWith(isRequestingStreamKey: false); } on ApiException catch (error) { debugPrint('推流 Key 接口请求失败: ${error.message}'); - state = state.copyWith( - isRequestingStreamKey: false, - errorMessage: error.message, - ); + state = state.copyWith(isRequestingStreamKey: false); + AppToast.show(error.message); } catch (error) { debugPrint('推流 Key 接口请求失败: $error'); - state = state.copyWith( - isRequestingStreamKey: false, - errorMessage: '推流 Key 获取失败', - ); + state = state.copyWith(isRequestingStreamKey: false); + AppToast.show('推流 Key 获取失败'); } } } diff --git a/lib/features/scan_qrcode/pages/page_scan_qrcode.dart b/lib/features/scan_qrcode/pages/page_scan_qrcode.dart index 159c780..d383fec 100644 --- a/lib/features/scan_qrcode/pages/page_scan_qrcode.dart +++ b/lib/features/scan_qrcode/pages/page_scan_qrcode.dart @@ -1,4 +1,5 @@ import 'package:flutter/material.dart'; +import 'package:flutter_easyloading/flutter_easyloading.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:recording_tool/app/router/app_navigator.dart'; @@ -6,7 +7,9 @@ import 'package:recording_tool/core/cache/app_storage.dart'; import 'package:recording_tool/core/cache/storage_keys.dart'; import 'package:recording_tool/features/auth/pages/page_auth.dart'; import 'package:recording_tool/features/auth/view_model_auth/view_model_auth.dart'; +import 'package:recording_tool/features/events/model/model_event_info.dart'; import 'package:recording_tool/features/events/pages/page_event_info.dart'; +import 'package:recording_tool/features/events/view_model/view_model_event_info.dart'; import 'package:recording_tool/features/recording/model/model_recording_context.dart'; import 'package:recording_tool/shared/widgets/app_bar.dart'; import 'package:recording_tool/shared/widgets/app_button.dart'; @@ -126,12 +129,30 @@ class _AuthPageWidgetState extends ConsumerState { context, ); if (playerId == null || playerId.isEmpty) { - AppToast.show('无效的参赛凭证'); + AppToast.show('查询选手信息失败'); return; } + EasyLoading.show(status: '查询选手信息...'); + try { + final success = await ref + .read(eventInfoProvider.notifier) + .loadRegistrationList( + request: PlayerRegistrationListReq( + userId: playerId, + ), + ); + EasyLoading.dismiss(); + if (!success) { + AppToast.show('查询选手信息失败'); + return; + } + if (!mounted) return; - /// TODO - AppNavigator.push(EventInfoPage(playerId: playerId)); + AppNavigator.push(EventInfoPage(playerId: playerId)); + } catch (error) { + AppToast.show('查询选手信息失败'); + EasyLoading.dismiss(); + } }, variant: AppButtonVariant.secondary, ),