flet-webview 0.1.0.dev1__py3-none-any.whl → 0.2.0.dev49__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.
- flet_webview/__init__.py +7 -7
- flet_webview/types.py +71 -0
- flet_webview/webview.py +432 -413
- flet_webview-0.2.0.dev49.dist-info/METADATA +67 -0
- flet_webview-0.2.0.dev49.dist-info/RECORD +23 -0
- {flet_webview-0.1.0.dev1.dist-info → flet_webview-0.2.0.dev49.dist-info}/WHEEL +1 -1
- flet_webview-0.2.0.dev49.dist-info/licenses/LICENSE +201 -0
- flutter/flet_webview/lib/flet_webview.dart +1 -1
- flutter/flet_webview/lib/src/extension.dart +16 -0
- flutter/flet_webview/lib/src/utils/webview.dart +3 -5
- flutter/flet_webview/lib/src/webview.dart +7 -19
- flutter/flet_webview/lib/src/webview_mobile_and_mac.dart +129 -143
- flutter/flet_webview/lib/src/webview_web.dart +2 -3
- flutter/flet_webview/lib/src/webview_web_vain.dart +2 -8
- flutter/flet_webview/lib/src/webview_windows_and_linux.dart +2 -9
- flutter/flet_webview/lib/src/webview_windows_and_linux_vain.dart +1 -3
- flutter/flet_webview/pubspec.lock +175 -126
- flutter/flet_webview/pubspec.yaml +10 -5
- flet_webview-0.1.0.dev1.dist-info/METADATA +0 -42
- flet_webview-0.1.0.dev1.dist-info/RECORD +0 -21
- flutter/flet_webview/lib/src/create_control.dart +0 -20
- {flet_webview-0.1.0.dev1.dist-info → flet_webview-0.2.0.dev49.dist-info}/top_level.txt +0 -0
|
@@ -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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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.
|
|
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
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
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.
|
|
57
|
+
Uri.parse(widget.control.getString("url", "https://flet.dev")!),
|
|
72
58
|
method: parseLoadRequestMethod(
|
|
73
|
-
widget.control.
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
"x": position.x.
|
|
80
|
-
|
|
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.
|
|
85
|
-
|
|
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.
|
|
95
|
-
|
|
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
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
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
|
|
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.
|
|
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
|
|
4
|
+
class WebviewWeb extends StatelessWidget {
|
|
5
5
|
final Control control;
|
|
6
|
-
final FletControlBackend backend;
|
|
7
6
|
|
|
8
|
-
const WebviewWeb({super.key, required this.control
|
|
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
|
|
5
|
-
|
|
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
|
-
|
|
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();
|