flet-webview 0.1.0.dev1__py3-none-any.whl → 0.2.0.dev44__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of flet-webview might be problematic. Click here for more details.

@@ -1,5 +1,3 @@
1
- import 'dart:convert';
2
-
3
1
  import 'package:flet/flet.dart';
4
2
  import 'package:flet_webview/src/utils/webview.dart';
5
3
  import 'package:flutter/material.dart';
@@ -7,11 +5,8 @@ import 'package:webview_flutter/webview_flutter.dart';
7
5
 
8
6
  class WebviewMobileAndMac extends StatefulWidget {
9
7
  final Control control;
10
- final FletControlBackend backend;
11
- final Color? bgcolor;
12
8
 
13
- const WebviewMobileAndMac(
14
- {super.key, required this.control, required this.backend, this.bgcolor});
9
+ const WebviewMobileAndMac({super.key, required this.control});
15
10
 
16
11
  @override
17
12
  State<WebviewMobileAndMac> createState() => _WebviewMobileAndMacState();
@@ -23,178 +18,169 @@ class _WebviewMobileAndMacState extends State<WebviewMobileAndMac> {
23
18
  @override
24
19
  void initState() {
25
20
  super.initState();
21
+ widget.control.addInvokeMethodListener(_invokeMethod);
26
22
 
27
23
  var params = const PlatformWebViewControllerCreationParams();
28
24
  controller = WebViewController.fromPlatformCreationParams(params);
29
25
 
30
- var preventLink = widget.control.attrString("preventLink")?.trim();
31
- if (widget.bgcolor != null) {
32
- controller.setBackgroundColor(widget.bgcolor!);
33
- }
34
-
35
26
  controller.setNavigationDelegate(
36
27
  NavigationDelegate(
37
28
  onProgress: (int progress) {
38
- debugPrint('WebViewControl is loading (progress : $progress%)');
39
- widget.backend.triggerControlEvent(
40
- widget.control.id, "progress", progress.toString());
29
+ widget.control.triggerEvent("progress", progress);
41
30
  },
42
31
  onUrlChange: (UrlChange url) {
43
- debugPrint('WebViewControl URL changed: ${url.url}');
44
- widget.backend.triggerControlEvent(
45
- widget.control.id, "url_change", url.url ?? "");
32
+ widget.control.triggerEvent("url_change", url.url);
46
33
  },
47
34
  onPageStarted: (String url) {
48
- debugPrint('WebViewControl page started loading: $url');
49
- widget.backend
50
- .triggerControlEvent(widget.control.id, "page_started", url);
35
+ widget.control.triggerEvent("page_started", url);
51
36
  },
52
37
  onPageFinished: (String url) {
53
- debugPrint('WebViewControl page finished loading: $url');
54
- widget.backend
55
- .triggerControlEvent(widget.control.id, "page_ended", url);
38
+ widget.control.triggerEvent("page_ended", url);
56
39
  },
57
40
  onWebResourceError: (WebResourceError error) {
58
- widget.backend.triggerControlEvent(widget.control.id,
59
- "web_resource_error", "WebView error: ${error.description}");
41
+ widget.control.triggerEvent("web_resource_error", error.description);
60
42
  },
61
43
  onNavigationRequest: (NavigationRequest request) {
62
- if (preventLink != null && request.url.startsWith(preventLink)) {
63
- return NavigationDecision.prevent;
64
- }
65
- return NavigationDecision.navigate;
44
+ var links = widget.control.get("prevent_link");
45
+ var prevent = links is List &&
46
+ links.isNotEmpty &&
47
+ links.any((l) => request.url.startsWith(l));
48
+ return prevent
49
+ ? NavigationDecision.prevent
50
+ : NavigationDecision.navigate;
66
51
  },
67
52
  ),
68
53
  );
69
54
 
55
+ // request
70
56
  controller.loadRequest(
71
- Uri.parse(widget.control.attrString("url", "https://flet.dev")!),
57
+ Uri.parse(widget.control.getString("url", "https://flet.dev")!),
72
58
  method: parseLoadRequestMethod(
73
- widget.control.attrString("method"), LoadRequestMethod.get)!);
74
- controller.setOnScrollPositionChange((ScrollPositionChange position) {
75
- widget.backend.triggerControlEvent(
76
- widget.control.id,
77
- "scroll",
78
- jsonEncode({
79
- "x": position.x.toString(),
80
- "y": position.y.toString(),
81
- }));
82
- });
59
+ widget.control.getString("method"), LoadRequestMethod.get)!);
60
+
61
+ // scroll
62
+ if (!isMacOSDesktop()) {
63
+ controller.setOnScrollPositionChange((ScrollPositionChange position) {
64
+ widget.control
65
+ .triggerEvent("scroll", {"x": position.x, "y": position.y});
66
+ });
67
+ }
68
+
69
+ // console
83
70
  controller.setOnConsoleMessage((JavaScriptConsoleMessage message) {
84
- widget.backend.triggerControlEvent(
85
- widget.control.id,
86
- "console_message",
87
- jsonEncode({
88
- "message": message.message,
89
- "level": message.level.name,
90
- }));
71
+ widget.control.triggerEvent("console_message",
72
+ {"message": message.message, "level": message.level.name});
91
73
  });
74
+
75
+ // alert
92
76
  controller.setOnJavaScriptAlertDialog(
93
77
  (JavaScriptAlertDialogRequest request) async {
94
- widget.backend.triggerControlEvent(
95
- widget.control.id,
96
- "javascript_alert_dialog",
97
- jsonEncode({
98
- "message": request.message,
99
- "url": request.url,
100
- }));
78
+ widget.control.triggerEvent("javascript_alert_dialog",
79
+ {"message": request.message, "url": request.url});
101
80
  });
81
+ }
102
82
 
103
- // Subscribe to backend methods
104
- widget.backend.subscribeMethods(widget.control.id,
105
- (methodName, args) async {
106
- switch (methodName) {
107
- case "reload":
108
- await controller.reload();
109
- break;
110
- case "can_go_back":
111
- return controller.canGoBack().toString();
112
- case "can_go_forward":
113
- return controller.canGoForward().toString();
114
- case "go_back":
115
- if (await controller.canGoBack()) {
116
- await controller.goBack();
117
- }
118
- break;
119
- case "go_forward":
120
- if (await controller.canGoForward()) {
121
- await controller.goForward();
122
- }
123
- break;
124
- case "enable_zoom":
125
- await controller.enableZoom(true);
126
- break;
127
- case "disable_zoom":
128
- await controller.enableZoom(false);
129
- break;
130
- case "clear_cache":
131
- await controller.clearCache();
132
- break;
133
- case "clear_local_storage":
134
- await controller.clearLocalStorage();
135
- break;
136
- case "get_current_url":
137
- return await controller.currentUrl();
138
- case "get_title":
139
- return await controller.getTitle();
140
- case "get_user_agent":
141
- return await controller.getUserAgent();
142
- case "load_file":
143
- var path = args["path"];
144
- if (path != null) {
145
- await controller.loadFile(path);
146
- }
147
- break;
148
- case "load_html":
149
- var html = args["value"];
150
- if (html != null) {
151
- await controller.loadHtmlString(html, baseUrl: args["base_url"]);
152
- }
153
- break;
154
- case "load_request":
155
- var url = args["url"];
156
- if (url != null) {
157
- await controller.loadRequest(Uri.parse(url),
158
- method: parseLoadRequestMethod(
159
- args["method"], LoadRequestMethod.get)!);
160
- }
161
- break;
162
- case "run_javascript":
163
- var javascript = args["value"];
164
- if (javascript != null) {
165
- await controller.runJavaScript(javascript);
166
- }
167
- break;
168
- case "scroll_to":
169
- var x = parseInt(args["x"]);
170
- var y = parseInt(args["y"]);
171
- if (x != null && y != null) {
172
- await controller.scrollTo(x, y);
173
- }
174
- break;
175
- case "scroll_by":
176
- var x = parseInt(args["x"]);
177
- var y = parseInt(args["y"]);
178
- if (x != null && y != null) {
179
- await controller.scrollBy(x, y);
180
- }
181
- break;
182
- case "set_javascript_mode":
183
- var value = parseBool(args["value"]);
184
- if (value != null) {
185
- await controller.setJavaScriptMode(
186
- value ? JavaScriptMode.unrestricted : JavaScriptMode.disabled);
187
- }
188
- break;
189
- }
190
- return null;
191
- });
83
+ Future<dynamic> _invokeMethod(String name, dynamic args) async {
84
+ debugPrint("WebView.$name($args)");
85
+ switch (name) {
86
+ case "reload":
87
+ await controller.reload();
88
+ break;
89
+ case "can_go_back":
90
+ return controller.canGoBack().toString();
91
+ case "can_go_forward":
92
+ return controller.canGoForward().toString();
93
+ case "go_back":
94
+ if (await controller.canGoBack()) {
95
+ await controller.goBack();
96
+ }
97
+ break;
98
+ case "go_forward":
99
+ if (await controller.canGoForward()) {
100
+ await controller.goForward();
101
+ }
102
+ break;
103
+ case "enable_zoom":
104
+ await controller.enableZoom(true);
105
+ break;
106
+ case "disable_zoom":
107
+ await controller.enableZoom(false);
108
+ break;
109
+ case "clear_cache":
110
+ await controller.clearCache();
111
+ break;
112
+ case "clear_local_storage":
113
+ await controller.clearLocalStorage();
114
+ break;
115
+ case "get_current_url":
116
+ return await controller.currentUrl();
117
+ case "get_title":
118
+ return await controller.getTitle();
119
+ case "get_user_agent":
120
+ return await controller.getUserAgent();
121
+ case "load_file":
122
+ await controller.loadFile(args["path"]);
123
+ break;
124
+ case "load_html":
125
+ await controller.loadHtmlString(args["value"],
126
+ baseUrl: args["base_url"]);
127
+ break;
128
+ case "load_request":
129
+ var url = args["url"];
130
+ if (url != null) {
131
+ await controller.loadRequest(Uri.parse(url),
132
+ method: parseLoadRequestMethod(
133
+ args["method"], LoadRequestMethod.get)!);
134
+ }
135
+ break;
136
+ case "run_javascript":
137
+ var javascript = args["value"];
138
+ if (javascript != null) {
139
+ await controller.runJavaScript(javascript);
140
+ }
141
+ break;
142
+ case "scroll_to":
143
+ var x = parseInt(args["x"]);
144
+ var y = parseInt(args["y"]);
145
+ if (x != null && y != null) {
146
+ await controller.scrollTo(x, y);
147
+ }
148
+ break;
149
+ case "scroll_by":
150
+ var x = parseInt(args["x"]);
151
+ var y = parseInt(args["y"]);
152
+ if (x != null && y != null) {
153
+ await controller.scrollBy(x, y);
154
+ }
155
+ break;
156
+ case "set_javascript_mode":
157
+ var value = parseBool(args["value"]);
158
+ if (value != null) {
159
+ await controller.setJavaScriptMode(
160
+ value ? JavaScriptMode.unrestricted : JavaScriptMode.disabled);
161
+ }
162
+ break;
163
+ default:
164
+ throw Exception("Unknown WebView method: $name");
165
+ }
166
+ }
167
+
168
+ @override
169
+ void dispose() {
170
+ debugPrint("WebViewControl dispose: ${widget.control.id}");
171
+ widget.control.removeInvokeMethodListener(_invokeMethod);
172
+ super.dispose();
192
173
  }
193
174
 
194
175
  @override
195
176
  Widget build(BuildContext context) {
196
177
  debugPrint("WebViewControl build: ${widget.control.id}");
197
178
 
179
+ var bgcolor = widget.control.getColor("bgcolor", context);
180
+
181
+ if (bgcolor != null) {
182
+ controller.setBackgroundColor(bgcolor);
183
+ }
198
184
  return WebViewWidget(controller: controller);
199
185
  }
200
186
  }
@@ -5,9 +5,8 @@ import 'package:webview_flutter_web/webview_flutter_web.dart';
5
5
 
6
6
  class WebviewWeb extends StatefulWidget {
7
7
  final Control control;
8
- final FletControlBackend backend;
9
8
 
10
- const WebviewWeb({super.key, required this.control, required this.backend});
9
+ const WebviewWeb({super.key, required this.control});
11
10
 
12
11
  @override
13
12
  State<WebviewWeb> createState() => _WebviewWebState();
@@ -25,7 +24,7 @@ class _WebviewWebState extends State<WebviewWeb> {
25
24
  )..loadRequest(
26
25
  LoadRequestParams(
27
26
  uri: Uri.parse(
28
- widget.control.attrString("url", "https://flet.dev")!)),
27
+ widget.control.getString("url", "https://flet.dev")!)),
29
28
  );
30
29
  }
31
30
 
@@ -1,16 +1,10 @@
1
1
  import 'package:flet/flet.dart';
2
2
  import 'package:flutter/material.dart';
3
3
 
4
- class WebviewWeb extends StatefulWidget {
4
+ class WebviewWeb extends StatelessWidget {
5
5
  final Control control;
6
- final FletControlBackend backend;
7
6
 
8
- const WebviewWeb({super.key, required this.control, required this.backend});
9
- @override
10
- State<WebviewWeb> createState() => _WebviewWebState();
11
- }
12
-
13
- class _WebviewWebState extends State<WebviewWeb> {
7
+ const WebviewWeb({super.key, required this.control});
14
8
  @override
15
9
  Widget build(BuildContext context) {
16
10
  return const ErrorControl("Webview is not yet supported on this platform.");
@@ -1,16 +1,9 @@
1
1
  import 'package:flet/flet.dart';
2
2
  import 'package:flutter/material.dart';
3
3
 
4
- class WebviewDesktop extends StatefulWidget {
5
- final String url;
4
+ class WebviewDesktop extends StatelessWidget {
5
+ const WebviewDesktop({Key? key}) : super(key: key);
6
6
 
7
- const WebviewDesktop({Key? key, required this.url}) : super(key: key);
8
-
9
- @override
10
- State<WebviewDesktop> createState() => _WebviewDesktopState();
11
- }
12
-
13
- class _WebviewDesktopState extends State<WebviewDesktop> {
14
7
  @override
15
8
  Widget build(BuildContext context) {
16
9
  return const ErrorControl("Webview is not yet supported on this Platform.");
@@ -2,9 +2,7 @@ import 'package:flet/flet.dart';
2
2
  import 'package:flutter/material.dart';
3
3
 
4
4
  class WebviewDesktop extends StatefulWidget {
5
- final String url;
6
-
7
- const WebviewDesktop({Key? key, required this.url}) : super(key: key);
5
+ const WebviewDesktop({Key? key}) : super(key: key);
8
6
 
9
7
  @override
10
8
  State<WebviewDesktop> createState() => _WebviewDesktopState();