yumi-flutter/lib/shared/tools/sc_h5_url_utils.dart
2026-04-27 14:56:56 +08:00

61 lines
1.6 KiB
Dart

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,
);
}
}