Added more features webview

This commit is contained in:
Juan Gilsanz Polo
2024-02-22 22:30:44 +01:00
parent 8d85b80b09
commit ecdfb1e9c2
10 changed files with 178 additions and 17 deletions

View File

@@ -4,9 +4,9 @@
/// To regenerate, run: `dart run slang`
///
/// Locales: 2
/// Strings: 58 (29 per locale)
/// Strings: 68 (34 per locale)
///
/// Built on 2024-02-22 at 21:08 UTC
/// Built on 2024-02-22 at 21:21 UTC
// coverage:ignore-file
// ignore_for_file: type=lint
@@ -226,6 +226,11 @@ class _StringsWebviewEn {
// Translations
String get goBack => 'Go back';
String get goForward => 'Go forward';
String get reload => 'Reload';
String get openInSystemBrowser => 'Open in system browser';
String get copyLinkClipboard => 'Copy link to clipboard';
String get linkCopiedClipboard => 'Link copied to the clipboard.';
String get share => 'Share';
}
// Path: links.dates
@@ -341,6 +346,11 @@ class _StringsWebviewEs implements _StringsWebviewEn {
// Translations
@override String get goBack => 'Ir atrás';
@override String get goForward => 'Ir adelante';
@override String get reload => 'Recargar';
@override String get openInSystemBrowser => 'Abrir en el navegador del sistema';
@override String get copyLinkClipboard => 'Copiar enlace al portapapeles';
@override String get linkCopiedClipboard => 'Enlace copiado al portapapeles.';
@override String get share => 'Compartir';
}
// Path: links.dates
@@ -389,6 +399,11 @@ extension on Translations {
case 'settings.disconnectFromServer': return 'Disconnect from server';
case 'webview.goBack': return 'Go back';
case 'webview.goForward': return 'Go forward';
case 'webview.reload': return 'Reload';
case 'webview.openInSystemBrowser': return 'Open in system browser';
case 'webview.copyLinkClipboard': return 'Copy link to clipboard';
case 'webview.linkCopiedClipboard': return 'Link copied to the clipboard.';
case 'webview.share': return 'Share';
default: return null;
}
}
@@ -426,6 +441,11 @@ extension on _StringsEs {
case 'settings.disconnectFromServer': return 'Desconectar del servidor';
case 'webview.goBack': return 'Ir atrás';
case 'webview.goForward': return 'Ir adelante';
case 'webview.reload': return 'Recargar';
case 'webview.openInSystemBrowser': return 'Abrir en el navegador del sistema';
case 'webview.copyLinkClipboard': return 'Copiar enlace al portapapeles';
case 'webview.linkCopiedClipboard': return 'Enlace copiado al portapapeles.';
case 'webview.share': return 'Compartir';
default: return null;
}
}

View File

@@ -38,6 +38,11 @@
},
"webview": {
"goBack": "Go back",
"goForward": "Go forward"
"goForward": "Go forward",
"reload": "Reload",
"openInSystemBrowser": "Open in system browser",
"copyLinkClipboard": "Copy link to clipboard",
"linkCopiedClipboard": "Link copied to the clipboard.",
"share": "Share"
}
}

View File

@@ -38,6 +38,11 @@
},
"webview": {
"goBack": "Ir atrás",
"goForward": "Ir adelante"
"goForward": "Ir adelante",
"reload": "Recargar",
"openInSystemBrowser": "Abrir en el navegador del sistema",
"copyLinkClipboard": "Copiar enlace al portapapeles",
"linkCopiedClipboard": "Enlace copiado al portapapeles.",
"share": "Compartir"
}
}

View File

@@ -1,11 +1,14 @@
import 'package:flutter/material.dart';
import 'package:flutter_inappwebview/flutter_inappwebview.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:share_plus/share_plus.dart';
import 'package:linkdy/screens/webview/provider/webview.provider.dart';
import 'package:linkdy/models/data/bookmarks.dart';
import 'package:linkdy/i18n/strings.g.dart';
import 'package:linkdy/utils/copy_clipboard.dart';
import 'package:linkdy/utils/open_url.dart';
class WebView extends ConsumerWidget {
final Bookmark bookmark;
@@ -81,21 +84,69 @@ class WebView extends ConsumerWidget {
Padding(
padding: const EdgeInsets.all(8.0),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
IconButton(
onPressed: ref.watch(webViewProvider).canGoBack == true
? () => ref.watch(webViewProvider).inAppWebViewController?.goBack()
: null,
icon: const Icon(Icons.arrow_back_rounded),
tooltip: t.webview.goForward,
Row(
children: [
IconButton(
onPressed: ref.watch(webViewProvider).canGoBack == true
? () => ref.watch(webViewProvider).inAppWebViewController?.goBack()
: null,
icon: const Icon(Icons.arrow_back_rounded),
tooltip: t.webview.goForward,
),
const SizedBox(width: 8),
IconButton(
onPressed: ref.watch(webViewProvider).canGoForward == true
? () => ref.watch(webViewProvider).inAppWebViewController?.goForward()
: null,
icon: const Icon(Icons.arrow_forward_rounded),
tooltip: t.webview.goForward,
),
const SizedBox(width: 16),
IconButton(
onPressed: () => ref.watch(webViewProvider).inAppWebViewController?.reload(),
icon: const Icon(Icons.refresh_rounded),
tooltip: t.webview.reload,
),
],
),
const SizedBox(width: 8),
IconButton(
onPressed: ref.watch(webViewProvider).canGoForward == true
? () => ref.watch(webViewProvider).inAppWebViewController?.goForward()
: null,
icon: const Icon(Icons.arrow_forward_rounded),
tooltip: t.webview.goForward,
PopupMenuButton(
itemBuilder: (context) => [
PopupMenuItem(
onTap: () => Share.shareUri(Uri.parse(bookmark.url!)),
child: Row(
children: [
const Icon(Icons.share_rounded),
const SizedBox(width: 8),
Text(t.webview.share),
],
),
),
PopupMenuItem(
onTap: () => copyToClipboard(
value: bookmark.url!,
successMessage: t.webview.linkCopiedClipboard,
),
child: Row(
children: [
const Icon(Icons.copy_rounded),
const SizedBox(width: 8),
Text(t.webview.copyLinkClipboard),
],
),
),
PopupMenuItem(
onTap: () => openUrl(bookmark.url!),
child: Row(
children: [
const Icon(Icons.open_in_browser_rounded),
const SizedBox(width: 8),
Text(t.webview.openInSystemBrowser),
],
),
),
],
),
],
),

View File

@@ -0,0 +1,23 @@
// ignore_for_file: use_build_context_synchronously
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:linkdy/constants/global_keys.dart';
void copyToClipboard({
required String value,
required String successMessage,
}) async {
if (scaffoldMessengerGlobalKey.currentState != null) {
await Clipboard.setData(
ClipboardData(text: value),
);
scaffoldMessengerGlobalKey.currentState!.showSnackBar(
SnackBar(
content: Text(successMessage),
backgroundColor: Colors.green,
),
);
}
}