Added webview
This commit is contained in:
@@ -3,6 +3,8 @@ import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||
|
||||
import 'package:my_linkding/screens/links/provider/links.provider.dart';
|
||||
|
||||
import 'package:my_linkding/providers/router_provider.dart';
|
||||
import 'package:my_linkding/router/paths.dart';
|
||||
import 'package:my_linkding/i18n/strings.g.dart';
|
||||
|
||||
class Links extends ConsumerWidget {
|
||||
@@ -90,6 +92,7 @@ class Links extends ConsumerWidget {
|
||||
return Column(
|
||||
children: [
|
||||
ListTile(
|
||||
onTap: () => ref.watch(routerProvider).push(RoutesPaths.webview, extra: link),
|
||||
isThreeLine: true,
|
||||
title: Text(
|
||||
validateStrings(link?.title, link?.websiteTitle),
|
||||
|
||||
9
lib/screens/webview/model/webview.model.dart
Normal file
9
lib/screens/webview/model/webview.model.dart
Normal file
@@ -0,0 +1,9 @@
|
||||
import 'package:webview_flutter/webview_flutter.dart';
|
||||
|
||||
class WebViewModel {
|
||||
final WebViewController webViewController;
|
||||
|
||||
WebViewModel({
|
||||
required this.webViewController,
|
||||
});
|
||||
}
|
||||
33
lib/screens/webview/provider/webview.provider.dart
Normal file
33
lib/screens/webview/provider/webview.provider.dart
Normal file
@@ -0,0 +1,33 @@
|
||||
import 'package:riverpod_annotation/riverpod_annotation.dart';
|
||||
import 'package:webview_flutter/webview_flutter.dart';
|
||||
|
||||
import 'package:my_linkding/screens/webview/model/webview.model.dart';
|
||||
|
||||
part 'webview.provider.g.dart';
|
||||
|
||||
@riverpod
|
||||
class WebView extends _$WebView {
|
||||
@override
|
||||
WebViewModel build() {
|
||||
return WebViewModel(
|
||||
webViewController: WebViewController(
|
||||
onPermissionRequest: (request) => request.deny(),
|
||||
)
|
||||
..setJavaScriptMode(JavaScriptMode.unrestricted)
|
||||
..setNavigationDelegate(
|
||||
NavigationDelegate(
|
||||
onProgress: (int progress) {
|
||||
// Update loading bar.
|
||||
},
|
||||
onPageStarted: (String url) {},
|
||||
onPageFinished: (String url) {},
|
||||
onWebResourceError: (WebResourceError error) {},
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
void initialize(String url) {
|
||||
state.webViewController.loadRequest(Uri.parse(url));
|
||||
}
|
||||
}
|
||||
25
lib/screens/webview/provider/webview.provider.g.dart
Normal file
25
lib/screens/webview/provider/webview.provider.g.dart
Normal file
@@ -0,0 +1,25 @@
|
||||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||
|
||||
part of 'webview.provider.dart';
|
||||
|
||||
// **************************************************************************
|
||||
// RiverpodGenerator
|
||||
// **************************************************************************
|
||||
|
||||
String _$webViewHash() => r'9eb114ec97e04b92aa1e2ec9fc8948b1443c948c';
|
||||
|
||||
/// See also [WebView].
|
||||
@ProviderFor(WebView)
|
||||
final webViewProvider =
|
||||
AutoDisposeNotifierProvider<WebView, WebViewModel>.internal(
|
||||
WebView.new,
|
||||
name: r'webViewProvider',
|
||||
debugGetCreateSourceHash:
|
||||
const bool.fromEnvironment('dart.vm.product') ? null : _$webViewHash,
|
||||
dependencies: null,
|
||||
allTransitiveDependencies: null,
|
||||
);
|
||||
|
||||
typedef _$WebView = AutoDisposeNotifier<WebViewModel>;
|
||||
// ignore_for_file: type=lint
|
||||
// ignore_for_file: subtype_of_sealed_class, invalid_use_of_internal_member, invalid_use_of_visible_for_testing_member
|
||||
31
lib/screens/webview/ui/webview.dart
Normal file
31
lib/screens/webview/ui/webview.dart
Normal file
@@ -0,0 +1,31 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||
|
||||
import 'package:my_linkding/models/data/bookmarks.dart';
|
||||
import 'package:my_linkding/screens/webview/provider/webview.provider.dart';
|
||||
import 'package:webview_flutter/webview_flutter.dart';
|
||||
|
||||
class WebView extends ConsumerWidget {
|
||||
final Bookmark bookmark;
|
||||
|
||||
const WebView({
|
||||
Key? key,
|
||||
required this.bookmark,
|
||||
}) : super(key: key);
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context, WidgetRef ref) {
|
||||
WidgetsBinding.instance.addPostFrameCallback((_) {
|
||||
ref.read(webViewProvider.notifier).initialize(bookmark.url!);
|
||||
});
|
||||
|
||||
final webViewController = ref.watch(webViewProvider).webViewController;
|
||||
|
||||
return Scaffold(
|
||||
appBar: AppBar(
|
||||
title: Text(bookmark.title != "" ? bookmark.title! : bookmark.websiteTitle!),
|
||||
),
|
||||
body: webViewController != null ? WebViewWidget(controller: ref.watch(webViewProvider).webViewController!) : null,
|
||||
);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user