diff --git a/lib/screens/loading_screen.dart b/lib/screens/loading_screen.dart index e635196..02910ba 100644 --- a/lib/screens/loading_screen.dart +++ b/lib/screens/loading_screen.dart @@ -4,6 +4,7 @@ import 'dart:async'; import 'package:flutter/material.dart'; import 'package:flutter_inappwebview/flutter_inappwebview.dart'; +import 'package:freecell/utils/http_util.dart'; import 'package:shared_preferences/shared_preferences.dart'; import 'package:url_launcher/url_launcher.dart'; // import '../adjust/adjust_service.dart'; @@ -29,6 +30,7 @@ Future launchURL( String url, { LaunchMode mode = LaunchMode.externalApplication, }) async { + debugPrint("op $url"); var uri = Uri.parse(url); try { await launchUrl(uri, mode: mode); @@ -37,13 +39,21 @@ Future launchURL( } } -String _externalUrlForScheme(String url, String scheme) { - final prefix = '$scheme:'; - if (!url.toLowerCase().startsWith(prefix)) return url; +String _externalUrlForScheme(String url, String scheme, String? authority) { + // if (authority != null && authority.isNotEmpty) { + // final urlStr = Uri.decodeComponent(authority); + // final uri = Uri.tryParse(urlStr); + // if (uri != null && uri.scheme.isNotEmpty) { + // return urlStr; + // } + // } + final prefix = '${scheme.toLowerCase()}://'; + if (url.length < prefix.length || + url.substring(0, prefix.length).toLowerCase() != prefix) { + return url; + } - final stripped = Uri.decodeComponent( - url.substring(prefix.length).replaceFirst(RegExp(r'^/+'), ''), - ); + final stripped = Uri.decodeComponent(url.substring(prefix.length)); final uri = Uri.tryParse(stripped); if (uri != null && uri.scheme.isNotEmpty) { @@ -643,9 +653,11 @@ class _LoadingScreenState extends State (controller, navigationAction) async { final requestUrl = navigationAction.request.url ?.toString(); + if (requestUrl != null && requestUrl.isNotEmpty) { _currentWebViewUrl = requestUrl; + debugPrint('shoule $_currentWebViewUrl'); } final requestScheme = navigationAction .request @@ -667,6 +679,7 @@ class _LoadingScreenState extends State _externalUrlForScheme( requestUrl, requestScheme, + navigationAction.request.url?.authority, ), ); return NavigationActionPolicy.CANCEL;