diff --git a/README.md b/README.md
index a03478d..93788ac 100644
--- a/README.md
+++ b/README.md
@@ -130,6 +130,8 @@ On [this repository](https://github.com/JuanRodenas/Pihole_list) you can find a
- [pie chart](https://pub.dev/packages/pie_chart)
- [segmented button slide](https://pub.dev/packages/segmented_button_slide)
- [timezone](https://pub.dev/packages/timezone)
+- [url launcher](https://pub.dev/packages/url_launcher)
+- [flutter custom tabs](https://pub.dev/packages/flutter_custom_tabs)
diff --git a/lib/functions/open_url.dart b/lib/functions/open_url.dart
index 48b168f..00cfc17 100644
--- a/lib/functions/open_url.dart
+++ b/lib/functions/open_url.dart
@@ -1,21 +1,33 @@
-import 'package:flutter_custom_tabs/flutter_custom_tabs.dart';
+import 'dart:io';
+
+import 'package:flutter_custom_tabs/flutter_custom_tabs.dart' as flutter_custom_tabs;
+import 'package:url_launcher/url_launcher.dart' as url_launcher;
import 'package:sentry_flutter/sentry_flutter.dart';
void openUrl(String url) async {
- try {
- await launchUrl(
- Uri.parse(url),
- customTabsOptions: const CustomTabsOptions(
- shareState: CustomTabsShareState.browserDefault,
- urlBarHidingEnabled: true,
- showTitle: true,
- ),
- safariVCOptions: const SafariViewControllerOptions(
- barCollapsingEnabled: true,
- dismissButtonStyle: SafariViewControllerDismissButtonStyle.close,
- ),
- );
- } catch (e, stackTrace) {
- Sentry.captureException(e, stackTrace: stackTrace);
+ if (Platform.isAndroid || Platform.isIOS) {
+ try {
+ await flutter_custom_tabs.launchUrl(
+ Uri.parse(url),
+ customTabsOptions: const flutter_custom_tabs.CustomTabsOptions(
+ shareState: flutter_custom_tabs.CustomTabsShareState.browserDefault,
+ urlBarHidingEnabled: true,
+ showTitle: true,
+ ),
+ safariVCOptions: const flutter_custom_tabs.SafariViewControllerOptions(
+ barCollapsingEnabled: true,
+ dismissButtonStyle: flutter_custom_tabs.SafariViewControllerDismissButtonStyle.close,
+ ),
+ );
+ } catch (e, stackTrace) {
+ Sentry.captureException(e, stackTrace: stackTrace);
+ }
+ }
+ else {
+ try {
+ url_launcher.launchUrl(Uri.parse(url));
+ } catch (e, stackTrace) {
+ Sentry.captureException(e, stackTrace: stackTrace);
+ }
}
}
\ No newline at end of file
diff --git a/lib/screens/home/appbar.dart b/lib/screens/home/appbar.dart
index 52ff350..5cd481f 100644
--- a/lib/screens/home/appbar.dart
+++ b/lib/screens/home/appbar.dart
@@ -151,7 +151,8 @@ class HomeAppBar extends StatelessWidget {
),
)
]
- )
+ ),
+ const SizedBox(width: 8),
],
);
}
diff --git a/linux/flutter/generated_plugin_registrant.cc b/linux/flutter/generated_plugin_registrant.cc
index cfc2a43..1786709 100644
--- a/linux/flutter/generated_plugin_registrant.cc
+++ b/linux/flutter/generated_plugin_registrant.cc
@@ -9,6 +9,7 @@
#include
#include
#include
+#include
#include
void fl_register_plugins(FlPluginRegistry* registry) {
@@ -21,6 +22,9 @@ void fl_register_plugins(FlPluginRegistry* registry) {
g_autoptr(FlPluginRegistrar) sqlite3_flutter_libs_registrar =
fl_plugin_registry_get_registrar_for_plugin(registry, "Sqlite3FlutterLibsPlugin");
sqlite3_flutter_libs_plugin_register_with_registrar(sqlite3_flutter_libs_registrar);
+ g_autoptr(FlPluginRegistrar) url_launcher_linux_registrar =
+ fl_plugin_registry_get_registrar_for_plugin(registry, "UrlLauncherPlugin");
+ url_launcher_plugin_register_with_registrar(url_launcher_linux_registrar);
g_autoptr(FlPluginRegistrar) window_size_registrar =
fl_plugin_registry_get_registrar_for_plugin(registry, "WindowSizePlugin");
window_size_plugin_register_with_registrar(window_size_registrar);
diff --git a/linux/flutter/generated_plugins.cmake b/linux/flutter/generated_plugins.cmake
index b5d8a41..59ac090 100644
--- a/linux/flutter/generated_plugins.cmake
+++ b/linux/flutter/generated_plugins.cmake
@@ -6,6 +6,7 @@ list(APPEND FLUTTER_PLUGIN_LIST
dynamic_color
sentry_flutter
sqlite3_flutter_libs
+ url_launcher_linux
window_size
)
diff --git a/macos/Flutter/GeneratedPluginRegistrant.swift b/macos/Flutter/GeneratedPluginRegistrant.swift
index b20cdf0..31a4f66 100644
--- a/macos/Flutter/GeneratedPluginRegistrant.swift
+++ b/macos/Flutter/GeneratedPluginRegistrant.swift
@@ -11,6 +11,7 @@ import package_info_plus
import sentry_flutter
import sqflite
import sqlite3_flutter_libs
+import url_launcher_macos
import window_size
func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) {
@@ -20,5 +21,6 @@ func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) {
SentryFlutterPlugin.register(with: registry.registrar(forPlugin: "SentryFlutterPlugin"))
SqflitePlugin.register(with: registry.registrar(forPlugin: "SqflitePlugin"))
Sqlite3FlutterLibsPlugin.register(with: registry.registrar(forPlugin: "Sqlite3FlutterLibsPlugin"))
+ UrlLauncherPlugin.register(with: registry.registrar(forPlugin: "UrlLauncherPlugin"))
WindowSizePlugin.register(with: registry.registrar(forPlugin: "WindowSizePlugin"))
}
diff --git a/macos/Podfile.lock b/macos/Podfile.lock
index 9df518c..1bad97f 100644
--- a/macos/Podfile.lock
+++ b/macos/Podfile.lock
@@ -31,6 +31,8 @@ PODS:
- sqlite3/fts5
- sqlite3/perf-threadsafe
- sqlite3/rtree
+ - url_launcher_macos (0.0.1):
+ - FlutterMacOS
- window_size (0.0.2):
- FlutterMacOS
@@ -42,6 +44,7 @@ DEPENDENCIES:
- sentry_flutter (from `Flutter/ephemeral/.symlinks/plugins/sentry_flutter/macos`)
- sqflite (from `Flutter/ephemeral/.symlinks/plugins/sqflite/darwin`)
- sqlite3_flutter_libs (from `Flutter/ephemeral/.symlinks/plugins/sqlite3_flutter_libs/macos`)
+ - url_launcher_macos (from `Flutter/ephemeral/.symlinks/plugins/url_launcher_macos/macos`)
- window_size (from `Flutter/ephemeral/.symlinks/plugins/window_size/macos`)
SPEC REPOS:
@@ -65,6 +68,8 @@ EXTERNAL SOURCES:
:path: Flutter/ephemeral/.symlinks/plugins/sqflite/darwin
sqlite3_flutter_libs:
:path: Flutter/ephemeral/.symlinks/plugins/sqlite3_flutter_libs/macos
+ url_launcher_macos:
+ :path: Flutter/ephemeral/.symlinks/plugins/url_launcher_macos/macos
window_size:
:path: Flutter/ephemeral/.symlinks/plugins/window_size/macos
@@ -79,6 +84,7 @@ SPEC CHECKSUMS:
sqflite: 673a0e54cc04b7d6dba8d24fb8095b31c3a99eec
sqlite3: f307b6291c4db7b5086c38d6237446b98a738581
sqlite3_flutter_libs: 6b9913d8fbb718e5ebf23658aa6934a0fb509c0f
+ url_launcher_macos: d2691c7dd33ed713bf3544850a623080ec693d95
window_size: 339dafa0b27a95a62a843042038fa6c3c48de195
PODFILE CHECKSUM: 353c8bcc5d5b0994e508d035b5431cfe18c1dea7
diff --git a/pubspec.lock b/pubspec.lock
index 907bae7..d584bfa 100644
--- a/pubspec.lock
+++ b/pubspec.lock
@@ -715,6 +715,46 @@ packages:
url: "https://pub.dev"
source: hosted
version: "2.2.2"
+ url_launcher:
+ dependency: "direct main"
+ description:
+ name: url_launcher
+ sha256: c512655380d241a337521703af62d2c122bf7b77a46ff7dd750092aa9433499c
+ url: "https://pub.dev"
+ source: hosted
+ version: "6.2.4"
+ url_launcher_android:
+ dependency: transitive
+ description:
+ name: url_launcher_android
+ sha256: "507dc655b1d9cb5ebc756032eb785f114e415f91557b73bf60b7e201dfedeb2f"
+ url: "https://pub.dev"
+ source: hosted
+ version: "6.2.2"
+ url_launcher_ios:
+ dependency: transitive
+ description:
+ name: url_launcher_ios
+ sha256: "75bb6fe3f60070407704282a2d295630cab232991eb52542b18347a8a941df03"
+ url: "https://pub.dev"
+ source: hosted
+ version: "6.2.4"
+ url_launcher_linux:
+ dependency: transitive
+ description:
+ name: url_launcher_linux
+ sha256: ab360eb661f8879369acac07b6bb3ff09d9471155357da8443fd5d3cf7363811
+ url: "https://pub.dev"
+ source: hosted
+ version: "3.1.1"
+ url_launcher_macos:
+ dependency: transitive
+ description:
+ name: url_launcher_macos
+ sha256: b7244901ea3cf489c5335bdacda07264a6e960b1c1b1a9f91e4bc371d9e68234
+ url: "https://pub.dev"
+ source: hosted
+ version: "3.1.0"
url_launcher_platform_interface:
dependency: transitive
description:
@@ -731,6 +771,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "2.2.3"
+ url_launcher_windows:
+ dependency: transitive
+ description:
+ name: url_launcher_windows
+ sha256: ecf9725510600aa2bb6d7ddabe16357691b6d2805f66216a97d1b881e21beff7
+ url: "https://pub.dev"
+ source: hosted
+ version: "3.1.1"
uuid:
dependency: "direct main"
description:
diff --git a/pubspec.yaml b/pubspec.yaml
index 9b4f395..f4bf52e 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -76,6 +76,7 @@ dependencies:
http: ^1.1.2
timezone: ^0.9.2
flutter_custom_tabs: ^2.0.0+1
+ url_launcher: ^6.2.4
dev_dependencies:
flutter_test:
diff --git a/windows/flutter/generated_plugin_registrant.cc b/windows/flutter/generated_plugin_registrant.cc
index 932f245..50bb1c8 100644
--- a/windows/flutter/generated_plugin_registrant.cc
+++ b/windows/flutter/generated_plugin_registrant.cc
@@ -9,6 +9,7 @@
#include
#include
#include
+#include
#include
void RegisterPlugins(flutter::PluginRegistry* registry) {
@@ -18,6 +19,8 @@ void RegisterPlugins(flutter::PluginRegistry* registry) {
registry->GetRegistrarForPlugin("SentryFlutterPlugin"));
Sqlite3FlutterLibsPluginRegisterWithRegistrar(
registry->GetRegistrarForPlugin("Sqlite3FlutterLibsPlugin"));
+ UrlLauncherWindowsRegisterWithRegistrar(
+ registry->GetRegistrarForPlugin("UrlLauncherWindows"));
WindowSizePluginRegisterWithRegistrar(
registry->GetRegistrarForPlugin("WindowSizePlugin"));
}
diff --git a/windows/flutter/generated_plugins.cmake b/windows/flutter/generated_plugins.cmake
index e7261c3..71f5fcf 100644
--- a/windows/flutter/generated_plugins.cmake
+++ b/windows/flutter/generated_plugins.cmake
@@ -6,6 +6,7 @@ list(APPEND FLUTTER_PLUGIN_LIST
dynamic_color
sentry_flutter
sqlite3_flutter_libs
+ url_launcher_windows
window_size
)
diff --git a/windows/innosetup_installer_builder.iss b/windows/innosetup_installer_builder.iss
index b25de17..92a4b72 100644
--- a/windows/innosetup_installer_builder.iss
+++ b/windows/innosetup_installer_builder.iss
@@ -43,6 +43,7 @@ Source: "..\build\windows\x64\runner\Release\flutter_windows.dll"; DestDir: "{ap
Source: "..\build\windows\x64\runner\Release\sentry_flutter_plugin.dll"; DestDir: "{app}"; Flags: ignoreversion
Source: "..\build\windows\x64\runner\Release\sqlite3.dll"; DestDir: "{app}"; Flags: ignoreversion
Source: "..\build\windows\x64\runner\Release\sqlite3_flutter_libs_plugin.dll"; DestDir: "{app}"; Flags: ignoreversion
+Source: "..\build\windows\x64\runner\Release\url_launcher_windows_plugin.dll"; DestDir: "{app}"; Flags: ignoreversion
Source: "..\build\windows\x64\runner\Release\window_size_plugin.dll"; DestDir: "{app}"; Flags: ignoreversion
Source: "..\build\windows\x64\runner\Release\data\*"; DestDir: "{app}\data"; Flags: ignoreversion recursesubdirs createallsubdirs
; NOTE: Don't use "Flags: ignoreversion" on any shared system files