我使用的是旧版本的Flutter_webview(版本3.0.4)。我已将数据传递给 webview 并且运行良好。但现在我想使用最新版本,即webview_flutter:^4.7.0。如何将数据传递到新版本?
旧版本
WebView(initialUrl: snapshot.data!.authorizationUrl!, //This is the data I want to pass to the new version
javascriptMode: JavascriptMode.unrestricted,)
新版本
controller = WebViewController()
..setJavaScriptMode(JavaScriptMode.unrestricted)
..setBackgroundColor(const Color(0x00000000))
..setNavigationDelegate(
NavigationDelegate(
onProgress: (int progress) {
// Update loading bar.
},
onPageStarted: (String url) {},
onPageFinished: (String url) {},
onWebResourceError: (WebResourceError error) {},
onNavigationRequest: (NavigationRequest request) {
if (request.url.startsWith('https://www.youtube.com/')) {
return NavigationDecision.prevent;
}
return NavigationDecision.navigate;
},
),
)
..loadRequest(Uri.parse('https://flutter.dev'));
如何将数据传递到新版本?
从 3.0 迁移到 4.0 版本中实例化 WebViewController 3.0及以下版本,WebViewController只能在WebView添加到小部件树后在回调中检索。现在,WebViewController 必须在添加到小部件之前实例化并可以使用 树。有关示例,请参阅上面的“用法”部分。
替换 WebView 功能 WebView 类已被删除 它的功能已分为 WebViewController 和 WebViewWidget。
WebViewController 处理与相关的所有功能 每个平台提供的底层网络视图。 (例如,加载 url,设置底层平台视图的背景颜色,或者 清除缓存)。
WebViewWidget 采用 WebViewController 并处理所有 Flutter 小部件 相关功能(例如布局方向、手势识别器)。
有关更多详细信息,请参阅 WebViewController 和 WebViewWidget 的 Dartdocs。
这是您可以使用的示例
import 'package:flutter/material.dart';
import 'package:webview_flutter/webview_flutter.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: WebViewExample(),
);
}
}
class WebViewExample extends StatefulWidget {
@override
_WebViewExampleState createState() => _WebViewExampleState();
}
class _WebViewExampleState extends State<WebViewExample> {
late WebViewController webViewController;
@override
void initState() {
super.initState();
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) {
if (request.url.startsWith('https://www.youtube.com/')) {
return NavigationDecision.prevent;
}
return NavigationDecision.navigate;
},
),
)
..loadRequest(Uri.parse('https://flutter.dev'));
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('WebView Example'),
),
body: WebViewWidget(
controller: webViewController,
),
);
}
}