h5补token传参

This commit is contained in:
roxy 2026-04-27 14:56:56 +08:00
parent 4cf895b11e
commit a3f8db991d
5 changed files with 70 additions and 22 deletions

View File

@ -14,6 +14,7 @@ import 'package:yumi/modules/room_game/data/room_game_repository.dart';
import 'package:yumi/modules/room_game/utils/room_game_viewport.dart';
import 'package:yumi/modules/room_game/views/baishun_loading_view.dart';
import 'package:yumi/modules/wallet/wallet_route.dart';
import 'package:yumi/shared/tools/sc_h5_url_utils.dart';
import 'package:yumi/ui_kit/components/sc_tts.dart';
class BaishunGamePage extends StatefulWidget {
@ -216,7 +217,8 @@ class _BaishunGamePageState extends State<BaishunGamePage> {
return;
}
final uri = Uri.tryParse(entryUrl);
final h5Url = SCH5UrlUtils.appendToken(entryUrl);
final uri = Uri.tryParse(h5Url);
if (uri == null) {
throw Exception('Invalid game entry url: $entryUrl');
}

View File

@ -13,6 +13,7 @@ import 'package:yumi/modules/room_game/data/room_game_repository.dart';
import 'package:yumi/modules/room_game/utils/room_game_viewport.dart';
import 'package:yumi/modules/room_game/views/baishun_loading_view.dart';
import 'package:yumi/modules/wallet/wallet_route.dart';
import 'package:yumi/shared/tools/sc_h5_url_utils.dart';
import 'package:yumi/ui_kit/components/sc_tts.dart';
class LeaderGamePage extends StatefulWidget {
@ -189,7 +190,8 @@ class _LeaderGamePageState extends State<LeaderGamePage> {
await _controller.loadHtmlString(_buildMockHtml());
return;
}
final uri = Uri.tryParse(entryUrl);
final h5Url = SCH5UrlUtils.appendToken(entryUrl);
final uri = Uri.tryParse(h5Url);
if (uri == null) {
throw Exception('Invalid game entry url: $entryUrl');
}

View File

@ -12,6 +12,7 @@ import 'package:yumi/app/constants/sc_global_config.dart';
import 'package:yumi/app/constants/sc_screen.dart';
import 'package:yumi/app/routes/sc_fluro_navigator.dart';
import 'package:yumi/shared/tools/sc_deviceId_utils.dart';
import 'package:yumi/shared/tools/sc_h5_url_utils.dart';
import 'package:yumi/shared/tools/sc_room_utils.dart';
import 'package:yumi/shared/tools/sc_url_launcher_utils.dart';
import 'package:yumi/main.dart';
@ -46,12 +47,7 @@ class _WebViewPageState extends State<WebViewPage> {
@override
void initState() {
super.initState();
if (widget.url.split("?").length > 1) {
urlLink = "${widget.url}&";
} else {
urlLink = "${widget.url}?";
}
urlLink = "${urlLink}lang=${SCGlobalConfig.lang}";
urlLink = SCH5UrlUtils.appendAppParams(widget.url);
// WebViewController
_controller =
WebViewController()

View File

@ -1,11 +1,11 @@
import 'package:flutter/cupertino.dart';
import 'package:yumi/shared/tools/sc_room_utils.dart';
import 'package:yumi/shared/tools/sc_string_utils.dart';
import 'package:yumi/shared/tools/sc_h5_url_utils.dart';
import 'package:yumi/shared/tools/sc_url_launcher_utils.dart';
import 'package:yumi/shared/business_logic/models/res/sc_index_banner_res.dart';
import 'package:yumi/modules/index/main_route.dart';
import 'package:yumi/app/routes/sc_fluro_navigator.dart';
import 'package:yumi/shared/data_sources/sources/local/user_manager.dart';
import '../../shared/data_sources/models/enum/sc_banner_open_type.dart';
@ -47,18 +47,6 @@ class SCBannerUtils {
}
static String _appendToken(String url) {
final token = AccountStorage().getToken();
if (token.isEmpty) {
return url;
}
final uri = Uri.tryParse(url);
if (uri == null) {
return url;
}
final queryParameters = Map<String, String>.from(uri.queryParameters);
queryParameters['token'] = token;
return uri.replace(queryParameters: queryParameters).toString();
return SCH5UrlUtils.appendToken(url);
}
}

View File

@ -0,0 +1,60 @@
import 'package:yumi/app/constants/sc_global_config.dart';
import 'package:yumi/shared/data_sources/sources/local/user_manager.dart';
class SCH5UrlUtils {
static String appendAppParams(String url) {
return _appendQueryParams(url, appendLang: true, appendToken: true);
}
static String appendToken(String url) {
return _appendQueryParams(url, appendLang: false, appendToken: true);
}
static String _appendQueryParams(
String url, {
required bool appendLang,
required bool appendToken,
}) {
final trimmedUrl = url.trim();
if (trimmedUrl.isEmpty) {
return url;
}
final uri = Uri.tryParse(trimmedUrl);
if (uri == null) {
return url;
}
final queryParameters = <String, dynamic>{};
uri.queryParametersAll.forEach((key, values) {
queryParameters[key] = List<String>.from(values);
});
var hasChanges = false;
if (appendLang && !_hasQueryKey(queryParameters, 'lang')) {
queryParameters['lang'] = SCGlobalConfig.lang;
hasChanges = true;
}
final token = AccountStorage().getToken();
if (appendToken &&
token.isNotEmpty &&
!_hasQueryKey(queryParameters, 'token')) {
queryParameters['token'] = token;
hasChanges = true;
}
if (!hasChanges) {
return url;
}
return uri.replace(queryParameters: queryParameters).toString();
}
static bool _hasQueryKey(Map<String, dynamic> queryParameters, String key) {
final lowerKey = key.toLowerCase();
return queryParameters.keys.any(
(queryKey) => queryKey.toLowerCase() == lowerKey,
);
}
}