yumi-flutter/lib/shared/tools/sc_banner_utils.dart

65 lines
2.0 KiB
Dart

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_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';
class SCBannerUtils {
static Future<void> openBanner(
SCIndexBannerRes item,
BuildContext context,
) async {
if (item.content == SCBannerOpenType.ENTER_ROOM.name) {
var params = item.params;
if (params != null && params.isNotEmpty) {
SCRoomUtils.goRoom(params, context);
}
} else {
var params = item.params;
if (params == null || params.isEmpty) {
return;
}
if (SCUrlLauncherUtils.shouldOpenExternally(params)) {
final launched = await SCUrlLauncherUtils.launchExternal(params);
if (launched) {
return;
}
if (!context.mounted) {
return;
}
}
if (SCStringUtils.checkIfUrl(params)) {
final h5Url = _appendToken(params);
SCNavigatorUtils.push(
context,
"${SCMainRoute.webViewPage}?url=${Uri.encodeComponent(h5Url)}&showTitle=false",
replace: false,
);
}
}
}
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();
}
}