在 Flutter 中,我有一个简单的有状态小部件,可以全屏显示网站。 为此,我使用了 webview_flutter 插件。 这是小部件的简化版本,我删除了不相关的变量和函数。例如,小部件全屏显示 Google 网站:
import 'package:flutter/material.dart';
import 'package:webview_flutter/webview_flutter.dart';
class WebViewScreen extends StatefulWidget {
const WebViewScreen({
Key? key,
}) : super(key: key);
@override
State<WebViewScreen> createState() => _WebViewScreenState();
}
class _WebViewScreenState extends State<WebViewScreen> {
@override
void initState() {
super.initState();
}
late WebViewController webViewController = WebViewController()
..setJavaScriptMode(JavaScriptMode.unrestricted)
..setBackgroundColor(const Color(0x00000000))
..setNavigationDelegate(
NavigationDelegate(
onProgress: (int progress) {},
onPageStarted: (String url) {},
onPageFinished: (String url) {},
onWebResourceError: (WebResourceError error) {},
onNavigationRequest: (NavigationRequest request) {
return NavigationDecision.navigate;
},
),
)
..loadRequest(Uri.parse('https://www.google.com/'));
@override
Widget build(BuildContext context) {
return Scaffold(
body: Column(
mainAxisSize: MainAxisSize.min,
children: [
Expanded(
child: WebViewWidget(
controller: webViewController,
),
),
],
),
);
}
}
我现在想做的是在加载 web 视图 (onPageFinished) 时立即调用 JavaScript 函数(出于测试目的,让我们让它
alert('Hello World');
)。
我怎样才能做到这一点?
我问了 ChatGPT-4 这个确切的问题。它的答案是添加
webViewController.evaluateJavascript("alert('Hello World');");
在 onPageFinished 方法中。所以:
//...
//onPageFinished: (String url) {
webViewController.evaluateJavascript("alert('Hello World');");
//},
//...
但这导致了一个问题:
The method 'evaluateJavascript' isn't defined for the type 'WebViewController'. Try correcting the name to the name of an existing method, or defining a method named 'evaluateJavascript'.
当我向 ChatGPT-4 询问这个问题时,它只提供了毫无意义的答案。我认为这与 ChatGPT 对最近的发展知之甚少有关。
我也发现了一个类似的问题here但它似乎不对,因为这里使用了“WebView”小部件而不是我正在使用的“WebViewWidget”小部件。