Flutter Webview:将数据传递到Flutter webview

问题描述 投票:0回答:1

我使用的是旧版本的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'));

如何将数据传递到新版本?

flutter webview-flutter
1个回答
0
投票

根据文档中的从 3.0 迁移到 4.0 部分

从 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,
      ),
    );
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.