解决解析 TOKEN 类型报错问题
This commit is contained in:
@@ -31,26 +31,33 @@ class JwtDecodedData {
|
|||||||
});
|
});
|
||||||
|
|
||||||
factory JwtDecodedData.fromJson(Map<String, dynamic> json) => JwtDecodedData(
|
factory JwtDecodedData.fromJson(Map<String, dynamic> json) => JwtDecodedData(
|
||||||
authType: json["authType"],
|
authType: json['authType']?.toString(),
|
||||||
deviceCode: json["deviceCode"],
|
deviceCode: json['deviceCode']?.toString(),
|
||||||
deviceId: json["deviceId"],
|
deviceId: _readInt(json['deviceId']),
|
||||||
deviceRole: json["deviceRole"],
|
deviceRole: json['deviceRole']?.toString(),
|
||||||
eventName: json["eventName"],
|
eventName: json['eventName']?.toString(),
|
||||||
oId: json["oId"]?.toString(),
|
oId: json['oId']?.toString(),
|
||||||
oIds: json["oIds"] == null
|
oIds: json['oIds'] == null
|
||||||
? []
|
? []
|
||||||
: List<String>.from(json["oIds"]!.map((x) => x?.toString())),
|
: List<String>.from(json['oIds']!.map((x) => x?.toString())),
|
||||||
organizerId: json["organizerId"]?.toString(),
|
organizerId: json['organizerId']?.toString(),
|
||||||
);
|
);
|
||||||
|
|
||||||
Map<String, dynamic> toJson() => {
|
Map<String, dynamic> toJson() => {
|
||||||
"authType": authType,
|
'authType': authType,
|
||||||
"deviceCode": deviceCode,
|
'deviceCode': deviceCode,
|
||||||
"deviceId": deviceId,
|
'deviceId': deviceId,
|
||||||
"deviceRole": deviceRole,
|
'deviceRole': deviceRole,
|
||||||
"eventName": eventName,
|
'eventName': eventName,
|
||||||
"oId": oId,
|
'oId': oId,
|
||||||
"oIds": oIds == null ? [] : List<dynamic>.from(oIds!.map((x) => x)),
|
'oIds': oIds == null ? [] : List<dynamic>.from(oIds!.map((x) => x)),
|
||||||
"organizerId": organizerId,
|
'organizerId': organizerId,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int? _readInt(dynamic value) {
|
||||||
|
if (value == null) return null;
|
||||||
|
if (value is int) return value;
|
||||||
|
if (value is num) return value.toInt();
|
||||||
|
return int.tryParse(value.toString());
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
import 'package:flutter/foundation.dart';
|
||||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||||
import 'package:flutter_riverpod/legacy.dart';
|
import 'package:flutter_riverpod/legacy.dart';
|
||||||
import 'package:jwt_decoder/jwt_decoder.dart';
|
import 'package:jwt_decoder/jwt_decoder.dart';
|
||||||
@@ -49,18 +50,17 @@ class AuthViewModel extends StateNotifier<AuthState> {
|
|||||||
/// 解析 TOKEN,并更新状态
|
/// 解析 TOKEN,并更新状态
|
||||||
Future<bool> parseTokenSetState(String token) async {
|
Future<bool> parseTokenSetState(String token) async {
|
||||||
final decoded = JwtDecoder.decode(token);
|
final decoded = JwtDecoder.decode(token);
|
||||||
if (decoded['data'] != null && decoded['data'] is Map<String, dynamic>) {
|
final rawData = decoded['data'];
|
||||||
|
if (rawData is! Map) return false;
|
||||||
try {
|
try {
|
||||||
final data = JwtDecodedData.fromJson(decoded['data']);
|
final data = JwtDecodedData.fromJson(Map<String, dynamic>.from(rawData));
|
||||||
state = state.copyWith(jwtDecodedData: data);
|
state = state.copyWith(jwtDecodedData: data);
|
||||||
} catch (error) {
|
|
||||||
state = const AuthState(errorMessage: '认证失败,请重试');
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
return true;
|
return true;
|
||||||
}
|
} catch (error) {
|
||||||
|
debugPrint('认证失败,请重试: $error');
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// 获取赛事列表
|
/// 获取赛事列表
|
||||||
Future<bool> getRecordList(String eventName) async {
|
Future<bool> getRecordList(String eventName) async {
|
||||||
|
|||||||
@@ -6,7 +6,6 @@ import 'package:flutter_screenutil/flutter_screenutil.dart';
|
|||||||
import 'package:recording_tool/app/router/app_navigator.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/app_storage.dart';
|
||||||
import 'package:recording_tool/core/cache/storage_keys.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/auth/view_model_auth/view_model_auth.dart';
|
||||||
import 'package:recording_tool/features/competition_teams/pages/page_competition_team_list.dart';
|
import 'package:recording_tool/features/competition_teams/pages/page_competition_team_list.dart';
|
||||||
import 'package:recording_tool/features/events/model/model_event_info.dart';
|
import 'package:recording_tool/features/events/model/model_event_info.dart';
|
||||||
@@ -43,14 +42,14 @@ class _ScanQrCodePageState extends ConsumerState<ScanQrCodePage> {
|
|||||||
WidgetsBinding.instance.addPostFrameCallback((_) async {
|
WidgetsBinding.instance.addPostFrameCallback((_) async {
|
||||||
final token = AppStorage.getString(StorageKeys.authToken);
|
final token = AppStorage.getString(StorageKeys.authToken);
|
||||||
if (token?.isNotEmpty ?? false) {
|
if (token?.isNotEmpty ?? false) {
|
||||||
final success = await ref
|
// final success = await ref
|
||||||
.read(authProvider.notifier)
|
// .read(authProvider.notifier)
|
||||||
.parseTokenSetState(token!);
|
// .parseTokenSetState(token!);
|
||||||
if (!success) {
|
// if (!success) {
|
||||||
AppToast.show('请重新鉴权');
|
// AppToast.show('请重新鉴权');
|
||||||
AppNavigator.pushAndRemoveUntil(const AuthPageWidget());
|
// AppNavigator.pushAndRemoveUntil(const AuthPageWidget());
|
||||||
return;
|
// return;
|
||||||
}
|
// }
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user