Fix uri launch
This commit is contained in:
44
lib/utils/uri_utils.dart
Normal file
44
lib/utils/uri_utils.dart
Normal file
@@ -0,0 +1,44 @@
|
||||
import 'dart:io';
|
||||
|
||||
import 'package:hiddify/utils/custom_loggers.dart';
|
||||
import 'package:loggy/loggy.dart';
|
||||
import 'package:share_plus/share_plus.dart';
|
||||
import 'package:url_launcher/url_launcher.dart';
|
||||
|
||||
abstract class UriUtils {
|
||||
static final loggy = Loggy<InfraLogger>("UriUtils");
|
||||
|
||||
static Future<bool> tryShareOrLaunchFile(Uri uri, {Uri? fileOrDir}) async {
|
||||
if (Platform.isWindows || Platform.isLinux) {
|
||||
return tryLaunch(fileOrDir ?? uri);
|
||||
}
|
||||
return tryShareFile(uri);
|
||||
}
|
||||
|
||||
static Future<bool> tryLaunch(Uri uri) async {
|
||||
try {
|
||||
loggy.debug("launching [$uri]");
|
||||
if (!await canLaunchUrl(uri)) {
|
||||
loggy.warning("can't launch [$uri]");
|
||||
return false;
|
||||
}
|
||||
return launchUrl(uri, mode: LaunchMode.externalApplication);
|
||||
} catch (e, stackTrace) {
|
||||
loggy.warning("error launching [$uri]", e, stackTrace);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
static Future<bool> tryShareFile(Uri uri, {String? mimeType}) async {
|
||||
try {
|
||||
loggy.debug("sharing [$uri]");
|
||||
final file = XFile(uri.path, mimeType: mimeType);
|
||||
final result = await Share.shareXFiles([file]);
|
||||
loggy.debug("share result: ${result.raw}");
|
||||
return result.status == ShareResultStatus.success;
|
||||
} catch (e, stackTrace) {
|
||||
loggy.warning("error sharing file [$uri]", e, stackTrace);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -11,4 +11,5 @@ export 'number_formatters.dart';
|
||||
export 'placeholders.dart';
|
||||
export 'platform_utils.dart';
|
||||
export 'text_utils.dart';
|
||||
export 'uri_utils.dart';
|
||||
export 'validators.dart';
|
||||
|
||||
Reference in New Issue
Block a user