Open links on system browser

This commit is contained in:
Juan Gilsanz Polo
2024-06-11 15:14:21 +02:00
parent 3ee194c50a
commit edf49edfa8
19 changed files with 243 additions and 53 deletions

View File

@@ -160,15 +160,19 @@ class Bookmarks extends _$Bookmarks {
}
void selectBookmark(Bookmark bookmark, double width) {
if (width <= Sizes.tabletBreakpoint && ref.watch(appStatusProvider).useInAppBrowser == true) {
ref.watch(routerProvider).push(RoutesPaths.webview, extra: bookmark);
} else if (width <= Sizes.tabletBreakpoint && ref.watch(appStatusProvider).useInAppBrowser == false) {
openUrl(bookmark.url!);
} else if (bookmark != state.selectedBookmark) {
state.webViewRouter.go(_webViewRoutePath, extra: bookmark);
if (ref.watch(appStatusProvider).openLinksBrowser == OpenLinksBrowser.browserCustomTab) {
openUrlCustomTab(bookmark.url!);
} else if (ref.watch(appStatusProvider).openLinksBrowser == OpenLinksBrowser.systemBrowser) {
openUrlSystemBrowser(bookmark.url!);
} else {
if (width <= Sizes.tabletBreakpoint) {
ref.watch(routerProvider).push(RoutesPaths.webview, extra: bookmark);
} else if (bookmark != state.selectedBookmark) {
state.webViewRouter.go(_webViewRoutePath, extra: bookmark);
}
state.selectedBookmark = bookmark;
ref.notifyListeners();
}
state.selectedBookmark = bookmark;
ref.notifyListeners();
}
Future<void> refresh() async {

View File

@@ -132,15 +132,19 @@ class SearchBookmarks extends _$SearchBookmarks {
}
void selectBookmark(Bookmark bookmark, double width) {
if (width <= Sizes.tabletBreakpoint && ref.watch(appStatusProvider).useInAppBrowser == true) {
ref.watch(routerProvider).push(RoutesPaths.webview, extra: bookmark);
} else if (width <= Sizes.tabletBreakpoint && ref.watch(appStatusProvider).useInAppBrowser == false) {
openUrl(bookmark.url!);
} else if (bookmark != state.selectedBookmark) {
state.webViewRouter.go(_webViewRoutePath, extra: bookmark);
if (ref.watch(appStatusProvider).openLinksBrowser == OpenLinksBrowser.browserCustomTab) {
openUrlCustomTab(bookmark.url!);
} else if (ref.watch(appStatusProvider).openLinksBrowser == OpenLinksBrowser.systemBrowser) {
openUrlSystemBrowser(bookmark.url!);
} else {
if (width <= Sizes.tabletBreakpoint) {
ref.watch(routerProvider).push(RoutesPaths.webview, extra: bookmark);
} else if (bookmark != state.selectedBookmark) {
state.webViewRouter.go(_webViewRoutePath, extra: bookmark);
}
state.selectedBookmark = bookmark;
ref.notifyListeners();
}
state.selectedBookmark = bookmark;
ref.notifyListeners();
}
void deleteBookmark(Bookmark bookmark) async {

View File

@@ -183,15 +183,19 @@ class FilteredBookmarks extends _$FilteredBookmarks {
}
void selectBookmark(Bookmark bookmark, double width) {
if (width <= Sizes.tabletBreakpoint && ref.watch(appStatusProvider).useInAppBrowser == true) {
ref.watch(routerProvider).push(RoutesPaths.webview, extra: bookmark);
} else if (width <= Sizes.tabletBreakpoint && ref.watch(appStatusProvider).useInAppBrowser == false) {
openUrl(bookmark.url!);
} else if (bookmark != state.selectedBookmark) {
state.webViewRouter.go(_webViewRoutePath, extra: bookmark);
if (ref.watch(appStatusProvider).openLinksBrowser == OpenLinksBrowser.browserCustomTab) {
openUrlCustomTab(bookmark.url!);
} else if (ref.watch(appStatusProvider).openLinksBrowser == OpenLinksBrowser.systemBrowser) {
openUrlSystemBrowser(bookmark.url!);
} else {
if (width <= Sizes.tabletBreakpoint) {
ref.watch(routerProvider).push(RoutesPaths.webview, extra: bookmark);
} else if (bookmark != state.selectedBookmark) {
state.webViewRouter.go(_webViewRoutePath, extra: bookmark);
}
state.selectedBookmark = bookmark;
ref.notifyListeners();
}
state.selectedBookmark = bookmark;
ref.notifyListeners();
}
Future<void> refresh() async {

View File

@@ -10,7 +10,7 @@ import 'package:linkdy/i18n/strings.g.dart';
import 'package:linkdy/utils/open_url.dart';
class OnboardingServerRequired extends ConsumerWidget {
const OnboardingServerRequired({Key? key}) : super(key: key);
const OnboardingServerRequired({super.key});
@override
Widget build(BuildContext context, WidgetRef ref) {
@@ -42,7 +42,7 @@ class OnboardingServerRequired extends ConsumerWidget {
const SizedBox(height: 16),
Card(
child: InkWell(
onTap: () => openUrl(Urls.linkdingInstallationInstructions),
onTap: () => openUrlCustomTab(Urls.linkdingInstallationInstructions),
borderRadius: BorderRadius.circular(10),
child: Padding(
padding: const EdgeInsets.all(24),

View File

@@ -0,0 +1,88 @@
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:linkdy/constants/enums.dart';
import 'package:linkdy/i18n/strings.g.dart';
import 'package:linkdy/providers/app_status.provider.dart';
class BrowserModeSelectionModal extends ConsumerWidget {
const BrowserModeSelectionModal({super.key});
@override
Widget build(BuildContext context, WidgetRef ref) {
return Container(
decoration: BoxDecoration(
color: Theme.of(context).colorScheme.surface,
borderRadius: const BorderRadius.only(
topLeft: Radius.circular(28),
topRight: Radius.circular(28),
),
),
child: SafeArea(
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
Flexible(
child: SingleChildScrollView(
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
Padding(
padding: const EdgeInsets.only(top: 24, left: 24, right: 24, bottom: 8),
child: Column(
children: [
Icon(
Icons.public_rounded,
color: Theme.of(context).colorScheme.secondary,
size: 24,
),
const SizedBox(height: 16),
Text(
t.settings.generalSettings.openLinksWith,
style: const TextStyle(
fontSize: 24,
),
),
],
),
),
RadioListTile(
value: OpenLinksBrowser.integrated,
groupValue: ref.watch(appStatusProvider).openLinksBrowser,
onChanged: ref.read(appStatusProvider.notifier).updateSelectedBrowser,
title: Text(t.settings.generalSettings.internalBrowser),
),
RadioListTile(
value: OpenLinksBrowser.browserCustomTab,
groupValue: ref.watch(appStatusProvider).openLinksBrowser,
onChanged: ref.read(appStatusProvider.notifier).updateSelectedBrowser,
title: Text(t.settings.generalSettings.browserCustomTab),
),
RadioListTile(
value: OpenLinksBrowser.systemBrowser,
groupValue: ref.watch(appStatusProvider).openLinksBrowser,
onChanged: ref.read(appStatusProvider.notifier).updateSelectedBrowser,
title: Text(t.settings.generalSettings.systemBrowser),
),
],
),
),
),
Padding(
padding: const EdgeInsets.all(24),
child: Row(
mainAxisAlignment: MainAxisAlignment.end,
children: [
TextButton(
onPressed: () => Navigator.pop(context),
child: Text(t.generic.close),
),
],
),
),
],
),
),
);
}
}

View File

@@ -1,17 +1,37 @@
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:linkdy/constants/enums.dart';
import 'package:linkdy/i18n/strings.g.dart';
import 'package:linkdy/screens/settings/ui/general_settings/browser_mode_selection_modal.dart';
import 'package:linkdy/screens/settings/ui/general_settings/disconnect_modal.dart';
import 'package:linkdy/providers/app_status.provider.dart';
import 'package:linkdy/widgets/section_label.dart';
class GeneralSettings extends ConsumerWidget {
const GeneralSettings({Key? key}) : super(key: key);
const GeneralSettings({super.key});
@override
Widget build(BuildContext context, WidgetRef ref) {
void openBrowserSelectionSheet() {
showModalBottomSheet(
context: context,
builder: (context) => const BrowserModeSelectionModal(),
);
}
String browserLabel() {
switch (ref.watch(appStatusProvider).openLinksBrowser) {
case OpenLinksBrowser.integrated:
return t.settings.generalSettings.internalBrowser;
case OpenLinksBrowser.browserCustomTab:
return t.settings.generalSettings.browserCustomTab;
case OpenLinksBrowser.systemBrowser:
return t.settings.generalSettings.systemBrowser;
}
}
return Scaffold(
appBar: AppBar(
title: Text(t.settings.generalSettings.generalSettings),
@@ -25,11 +45,10 @@ class GeneralSettings extends ConsumerWidget {
value: ref.watch(appStatusProvider).showFavicon,
onChanged: ref.read(appStatusProvider.notifier).setShowFavicon,
),
SwitchListTile(
title: Text(t.settings.generalSettings.useInAppBrowser),
subtitle: Text(t.settings.generalSettings.useInAppBrowserDescription),
value: ref.watch(appStatusProvider).useInAppBrowser,
onChanged: ref.read(appStatusProvider.notifier).setUseInAppBrowser,
ListTile(
title: Text(t.settings.generalSettings.openLinksWith),
subtitle: Text(browserLabel()),
onTap: openBrowserSelectionSheet,
),
const Padding(
padding: EdgeInsets.symmetric(vertical: 16),

View File

@@ -82,7 +82,7 @@ class _List extends ConsumerWidget {
Icons.open_in_new_rounded,
color: Theme.of(context).colorScheme.onSurfaceVariant,
),
onTap: () => openUrl(Urls.linkdingRepo),
onTap: () => openUrlCustomTab(Urls.linkdingRepo),
),
CustomListTile(
title: t.settings.appVersion,
@@ -99,7 +99,7 @@ class _List extends ConsumerWidget {
children: [
if (Platform.isAndroid)
IconButton(
onPressed: () => openUrl(Urls.playStoreLink),
onPressed: () => openUrlCustomTab(Urls.playStoreLink),
icon: SvgPicture.asset(
'assets/resources/google-play.svg',
color: Theme.of(context).colorScheme.onSurfaceVariant,
@@ -109,7 +109,7 @@ class _List extends ConsumerWidget {
tooltip: t.settings.visitGooglePlay,
),
IconButton(
onPressed: () => openUrl(Urls.gitHubRepo),
onPressed: () => openUrlCustomTab(Urls.gitHubRepo),
icon: SvgPicture.asset(
'assets/resources/github.svg',
color: Theme.of(context).colorScheme.onSurfaceVariant,

View File

@@ -143,7 +143,7 @@ class WebViewScreen extends HookConsumerWidget {
),
),
PopupMenuItem(
onTap: () => openUrl(bookmark.url!),
onTap: () => openUrlCustomTab(bookmark.url!),
child: Row(
children: [
const Icon(Icons.open_in_browser_rounded),