简体   繁体   English

平台异常 Flutter Webview,加载 Url 失败

[英]Platform Exception Flutter Webview, Load Url Failed

I have a code like below, on Android the following code runs fine, when I run the iOS application, I get an error like the following我有如下代码,在 Android 上,以下代码运行良好,当我运行 iOS 应用程序时,出现如下错误

PlatformException (PlatformException(loadUrl_failed, Failed parsing the URL, Request was: '{ headers = ""; url = "xxxxx; }', null)) PlatformException (PlatformException(loadUrl_failed, 解析 URL 失败, 请求为: '{ headers = ""; url = "xxxxx; }', null))

What should I do?我应该怎么办? i use this plugin https://pub.dev/packages/webview_flutter loadUrl function can't run at IOS appication我使用这个插件https://pub.dev/packages/webview_flutter loadUrl function can't run at IOS appication

class WebViewDefault extends StatefulWidget {
  final String targetUrl;

  const WebViewDefault({
    keys,
    @required this.targetUrl,
  }) : super(key: key);

  @override
  WebViewDefaultState createState() => WebViewDefaultState();
}

class WebViewDefaultState extends State<WebViewDefault> {
  var url;
  WebViewController controller;

  @override
  void initState() {
    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    url = widget.targetUrl;
    if (Platform.isAndroid) WebView.platform = SurfaceAndroidWebView();

    print("target URL ${widget.key} $url");
    return WebView(
      initialUrl: url,
      javascriptMode: JavascriptMode.unrestricted,
      onWebViewCreated: (webviewController) {
        controller = webviewController;
      },
      onProgress: (int progress) {
        print("WebView is loading(progress : $progress%)");
      },
      onPageStarted: (String url) {
        print('Page started loading: $url');
      },
      onPageFinished: (String url) {
         print('Page finished loading: $url');
      },
      gestureNavigationEnabled: true,
    );
  }

  void reloadNewUrl(url) {
    setState(() {
      controller.loadUrl(url);
    });
  }
}

Faced a similar issue recently.最近遇到了类似的问题。 Converting the url to URI did the trick.将 url 转换为 URI 就可以了。 Here is your code with a little tweak.这是您的代码,稍作调整。

class WebViewDefault extends StatefulWidget {
  final String targetUrl;

  const WebViewDefault({
    keys,
    @required this.targetUrl,
  }) : super(key: key);

  @override
  WebViewDefaultState createState() => WebViewDefaultState();
}

class WebViewDefaultState extends State<WebViewDefault> {
  var url;
  WebViewController controller;

  @override
  void initState() {
    super.initState();
    url = widget.targetUrl;
    if (Platform.isAndroid) WebView.platform = SurfaceAndroidWebView();
  }

  @override
  Widget build(BuildContext context) {
    print("target URL ${widget.key} $url");
    return WebView(
      initialUrl: Uri.parse(url).toString(),
      javascriptMode: JavascriptMode.unrestricted,
      onWebViewCreated: (webviewController) {
        controller = webviewController;
      },
      onProgress: (int progress) {
        print("WebView is loading(progress : $progress%)");
      },
      onPageStarted: (String url) {
        print('Page started loading: $url');
      },
      onPageFinished: (String url) {
         print('Page finished loading: $url');
      },
      gestureNavigationEnabled: true,
    );
  }

  void reloadNewUrl(url) {
    setState(() {
      controller.loadUrl(Uri.parse(url).toString());
    });
  }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM