diff --git a/packages/webview_flutter/CHANGELOG.md b/packages/webview_flutter/CHANGELOG.md index d0c61ab34541..39a45956f69d 100644 --- a/packages/webview_flutter/CHANGELOG.md +++ b/packages/webview_flutter/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.1.0+2 + +* Add error display on both iOS and Android when failing to load (e.g. due to 'ATS' on iOS or ssl error on Android). + ## 0.1.0+1 * Fix null crash when initialUrl is unset on iOS. diff --git a/packages/webview_flutter/android/src/main/java/io/flutter/plugins/webviewflutter/FlutterWebView.java b/packages/webview_flutter/android/src/main/java/io/flutter/plugins/webviewflutter/FlutterWebView.java index d51254a62a60..82fadb736cd4 100644 --- a/packages/webview_flutter/android/src/main/java/io/flutter/plugins/webviewflutter/FlutterWebView.java +++ b/packages/webview_flutter/android/src/main/java/io/flutter/plugins/webviewflutter/FlutterWebView.java @@ -1,8 +1,12 @@ package io.flutter.plugins.webviewflutter; import android.content.Context; +import android.net.http.SslError; +import android.util.Log; import android.view.View; +import android.webkit.SslErrorHandler; import android.webkit.WebView; +import android.webkit.WebViewClient; import io.flutter.plugin.common.BinaryMessenger; import io.flutter.plugin.common.MethodCall; import io.flutter.plugin.common.MethodChannel; @@ -18,6 +22,7 @@ public class FlutterWebView implements PlatformView, MethodCallHandler { @SuppressWarnings("unchecked") FlutterWebView(Context context, BinaryMessenger messenger, int id, Map params) { webView = new WebView(context); + webView.setWebViewClient(new FlutterWebViewClient()); if (params.containsKey("initialUrl")) { String url = (String) params.get("initialUrl"); webView.loadUrl(url); @@ -120,3 +125,11 @@ private void updateJsMode(int mode) { @Override public void dispose() {} } + +class FlutterWebViewClient extends WebViewClient { + @Override + public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) { + super.onReceivedSslError(view, handler, error); + Log.e("webview_flutter", error.toString()); + } +} diff --git a/packages/webview_flutter/ios/Classes/FlutterWebView.h b/packages/webview_flutter/ios/Classes/FlutterWebView.h index 268e704a5f76..ea69662828ae 100644 --- a/packages/webview_flutter/ios/Classes/FlutterWebView.h +++ b/packages/webview_flutter/ios/Classes/FlutterWebView.h @@ -3,7 +3,7 @@ NS_ASSUME_NONNULL_BEGIN -@interface FLTWebViewController : NSObject +@interface FLTWebViewController : NSObject - (instancetype)initWithFrame:(CGRect)frame viewIdentifier:(int64_t)viewId diff --git a/packages/webview_flutter/ios/Classes/FlutterWebView.m b/packages/webview_flutter/ios/Classes/FlutterWebView.m index 9ea2d911bca6..002eaacb26c5 100644 --- a/packages/webview_flutter/ios/Classes/FlutterWebView.m +++ b/packages/webview_flutter/ios/Classes/FlutterWebView.m @@ -41,6 +41,7 @@ - (instancetype)initWithFrame:(CGRect)frame if ([super init]) { _viewId = viewId; _webView = [[WKWebView alloc] initWithFrame:frame]; + _webView.navigationDelegate = self; NSString* channelName = [NSString stringWithFormat:@"plugins.flutter.io/webview_%lld", viewId]; _channel = [FlutterMethodChannel methodChannelWithName:channelName binaryMessenger:messenger]; __weak __typeof__(self) weakSelf = self; @@ -150,4 +151,18 @@ - (bool)loadUrl:(NSString*)url { return true; } +#pragma mark - +#pragma mark WKNavigationDelegate +- (void)webView:(WKWebView*)webView + didFailNavigation:(WKNavigation*)navigation + withError:(NSError*)error { + NSLog(@"%@", error.description); +} + +- (void)webView:(WKWebView*)webView + didFailProvisionalNavigation:(WKNavigation*)navigation + withError:(NSError*)error { + NSLog(@"%@", error.description); +} + @end diff --git a/packages/webview_flutter/pubspec.yaml b/packages/webview_flutter/pubspec.yaml index f0e335468696..5d6dea105d12 100644 --- a/packages/webview_flutter/pubspec.yaml +++ b/packages/webview_flutter/pubspec.yaml @@ -1,6 +1,6 @@ name: webview_flutter description: A Flutter plugin that provides a WebView widget on Android and iOS. -version: 0.1.0+1 +version: 0.1.0+2 author: Flutter Team homepage: https://github.com/flutter/plugins/tree/master/packages/webview_flutter