添加 jwt_decoder 依赖;更新 AuthApi 枚举以支持获取录像列表;新增录像响应模型和相关状态管理;重构 AuthViewModel 以解析和存储 JWT 数据;更新 ScanQrCodePage 以处理用户鉴权和获取录像列表。

This commit is contained in:
2026-07-14 10:16:31 +08:00
parent 45000b4188
commit 16ad7b253c
9 changed files with 249 additions and 14 deletions
@@ -1,13 +1,19 @@
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:recording_tool/app/router/app_navigator.dart';
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/pages/page_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';
import 'package:recording_tool/shared/widgets/app_qr_scanner_dialog.dart';
import 'package:recording_tool/shared/widgets/app_toast.dart';
class ScanQrCodePage extends StatefulWidget {
class ScanQrCodePage extends ConsumerStatefulWidget {
const ScanQrCodePage({super.key});
static const mockRtmpUrl =
@@ -24,10 +30,28 @@ class ScanQrCodePage extends StatefulWidget {
);
@override
State<ScanQrCodePage> createState() => _AuthPageWidgetState();
ConsumerState<ScanQrCodePage> createState() => _AuthPageWidgetState();
}
class _AuthPageWidgetState extends State<ScanQrCodePage> {
class _AuthPageWidgetState extends ConsumerState<ScanQrCodePage> {
@override
void initState() {
super.initState();
WidgetsBinding.instance.addPostFrameCallback((_) async {
final token = AppStorage.getString(StorageKeys.authToken);
if (token?.isNotEmpty ?? false) {
final success = await ref
.read(authProvider.notifier)
.parseTokenSetState(token!);
if (!success) {
AppToast.show('请重新鉴权');
AppNavigator.pushAndRemoveUntil(const AuthPageWidget());
return;
}
}
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
@@ -44,6 +68,30 @@ class _AuthPageWidgetState extends State<ScanQrCodePage> {
),
SizedBox(height: 20.h),
Consumer(
builder: (context, ref, child) {
return SizedBox(
width: 280.w,
height: 80.h,
child: AppButton(
label: '查看录像',
onPressed: () async {
final data = ref.watch(
authProvider.select((state) => state.jwtDecodedData),
);
if (data == null) return;
debugPrint('赛事名字: ${data.eventName}');
final eventName = data.eventName ?? '';
await ref
.read(authProvider.notifier)
.getRecordList(eventName);
},
variant: AppButtonVariant.secondary,
),
);
},
),
SizedBox(height: 16.h),
SizedBox(
width: 280.w,
height: 80.h,