Open links on system browser
This commit is contained in:
@@ -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 {
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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),
|
||||
|
||||
@@ -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),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -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),
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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),
|
||||
|
||||
Reference in New Issue
Block a user